我正在使用json-logic-js的绝对类型包。
当我使用动态操作符时,我似乎无法让TypeScript编译,但如果我使用静态操作符,它就可以正常工作。这个方法的作用是:
const staticRule: RulesLogic = {
'==': [{var:'one'},1]
}
字符串
但这并不是:
const op: ReservedOperations[] = ['==','>=','<=','===']
const dynamicOperator = op[1]
const dynamicRule: RulesLogic = {
[dynamicOperator]: [{var:'one'},1]
}
型
我得到错误:
Type '{ [x: string]: (number | { var: string; })[]; }' is not assignable to type 'RulesLogic<never>'.
Property 'log' is missing in type '{ [x: string]: (number | { var: string; })[]; }' but required in type 'JsonLogicLog<never>'.
型
这是一个TypeScript的Playground。
即使我只指定这两个操作符,它仍然不起作用:
const createRulesLogic = (operation: '==' | '!='): RulesLogic => ({
[operation]: [{var:'one'},1]
})
型
导致错误:
Type '{ [x: string]: (number | { var: string; })[]; }' is not assignable to type 'RulesLogic<never>'.
Property 'log' is missing in type '{ [x: string]: (number | { var: string; })[]; }' but required in type 'JsonLogicLog<never>'.
型
Playground链接
1条答案
按热度按时间ru9i0ody1#
staticRule
被自动识别为有效的RulesLogic
,特别是JsonLogicEqual
,因为您显式地将运算符/ket设置为==
。“动态”规则并不事先知道您将使用哪个操作符,并警告您,如果动态操作符是
log
,则您的规则将缺少对象中的log
键。