TypeScript:键入数组或数字的检查

时间:2018-05-11 18:30:07

标签: typescript

我正在尝试使用固定属性来实现一个对象类型,该属性的值是数组或数字。

lpParameter

我收到以下错误:

  

src / operators / gt.ts(15,12):属性'push'在类型上不存在   '号码|任何[]”。

当我将其更改为CreateThread()时,它可以正常工作。我不明白为什么。

2 个答案:

答案 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声明为gtGt类型可以分配给{$gt: Array<any>},因此您应该以这种方式编写函数:

Gt