我正在尝试使用固定属性来实现一个对象类型,该属性的值是数组或数字。
lpParameter
我收到以下错误:
src / operators / gt.ts(15,12):属性'push'在类型上不存在 '号码|任何[]”。
当我将其更改为CreateThread()
时,它可以正常工作。我不明白为什么。
答案 0 :(得分:2)
当您明确将其类型设置为gt
时,您正在重写TypeScript对您正在创建的Gt
对象的理解。
尝试更改行
let gt: Gt = {$gt: []}
到
let gt = {$gt: []}
明确的输入会覆盖TypeScript,因为我知道$gt
在这种情况下是一个数组,而是告诉它Array<any> | number
,即使您已明确地将其作为数组。<\ n / p>
执行此更改不会与函数的返回类型冲突,因为生成的对象仍然符合Gt
类型。
答案 1 :(得分:1)
你的问题在
行let gt: Gt = {$gt: []}
是的,您知道gt.$gt
包含一个数组,但是,通过将{$gt: []}
转换为Gt
,TypeScript编译器会丢失该信息,因此,当您稍后执行{{1}时},它只知道gt.$gt
的类型为gt
,因此Gt
可以包含数组或数字。这可能是愚蠢的,但编译器无法跟踪类型信息以及以前的值类型。
这就是你无法做到的原因
$gt
但如果你写的话可行吗
const p : string = [];
因为const p: string = [] as any;
可以分配到[]
,any
可以分配给任何内容。
您不需要将any
声明为gt
,Gt
类型可以分配给{$gt: Array<any>}
,因此您应该以这种方式编写函数:
Gt