打字稿类型断言

Typescript Type Assertion

假设我有一个包含许多变量的接口,并且我不想在使用它时初始化所有变量,所以我只放置了 any 类型断言。我只想知道这两个是否相同:

例如:

export interface Foo {
  a: string;
  b: number;
  c: Bar[];
  d: string;
  e: Bar;
}

let foo: Foo = {} as any;

let foo: Foo | any = {};

?

没有。它们不一样。

第一个

以下更安全:

let foo: Foo = {} as any;

你做不到

let foo: Foo = {} as any;
foo = {}; // Error  

第二个

以下内容会使您面临危险,例如

let foo: Foo | any = {};
foo = {}; // OKAY!

它们不一样。您必须查看编译器如何分解每个语句。

  1. 声明
  2. 变量名
  3. 类型声明符
  4. 声明的类型
  5. 分配符号
  6. 价值
  7. Cast 运算符
  8. 演员类型

所以

 | 1 | 2 |3| 4       |5| 4 | 5 | 6
  let foo : Foo       = {}   as  any;
  let foo : Foo | any = {};

所以第一个语句 not 允许 any 作为存储在变量 (2) 中的值的类型 (4),而第二个语句则允许。