打字稿类型断言

时间:2018-12-05 03:18:00

标签: 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 = {};

2 个答案:

答案 0 :(得分:1)

不。它们不一样。

第一

以下内容更安全:

let foo: Foo = {} as any;

你不能做

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

第二

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

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

答案 1 :(得分:1)

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

  1. 声明
  2. 变量名称
  3. 类型声明符
  4. 声明的类型
  5. 分配符号
  6. 演员运算符
  7. 投放类型

所以

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

因此,第一条语句 not 不允许any作为存储在变量(2)中的值的> df # A tibble: 55 x 2 datetime Freq <dttm> <int> 1 2018-11-01 12:41:57 215 2 2018-11-01 12:41:58 163 3 2018-11-01 12:47:06 225 4 2018-11-01 12:51:00 69 5 2018-11-01 12:57:37 203 6 2018-11-01 12:57:38 248 7 2018-11-01 12:57:38 58 8 2018-11-01 13:29:15 179 9 2018-11-01 13:37:45 233 10 2018-11-01 14:24:43 150 # ... with 45 more rows 作为类型(4),

相关问题