TypeScript编译看似无效的变量类型声明

时间:2019-09-14 07:05:31

标签: typescript

我在TypeScript应用程序(typescript:3.2.4tslint: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'.

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

正如@jonrsharpe所链接的那样,这是TypeScript中名为literal typing的有效表达式。

为可能会问相同问题的任何人回答我的问题。

export class Foo {

  private bar: 137;

}
编译器将

解释为barundefined,并且只能为其分配值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'