我在TypeScript应用程序(typescript:3.2.4
,tslint:5.14.0
)中声明了一个类变量,如下所示:
export class Foo {
private bar: 137;
...
}
这是一个错字,我 meant private bar = 137
。
我的问题是为什么要编译,为什么TSLint没有给出任何警告?
在运行时,值和typeof
均为undefined
。 TypeScript编译器如何解释这一点;它以为我想要什么?在功能上是否存在变量的类型可以是像137
这样的原始值的情况?
类似地,以下做进行编译:
export class Foo {
private bar: 'bar';
...
}
以下不编译:
export class Foo {
private bar: 137 = 42;
...
}
编译器错误为error TS2322: Type '42' is not assignable to type '137'.
这是怎么回事?
答案 0 :(得分:1)
正如@jonrsharpe所链接的那样,这是TypeScript中名为literal typing的有效表达式。
为可能会问相同问题的任何人回答我的问题。
export class Foo {
private bar: 137;
}
编译器将解释为bar
是undefined
,并且只能为其分配值137
。
更实际的情况是允许几个选择,例如:
export class Foo {
private bar: 0 | 25 | 50 | 75 | 100;
constructor() {
this.bar = 25;
this.bar = 100;
this.bar = 137; // compile time error
}
}
操作this.bar = 137
引发编译时错误:
error TS2322: Type '137' is not assignable to type '0 | 100 | 50 | 25 | 75'