打字稿类型断言
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!
它们不一样。您必须查看编译器如何分解每个语句。
- 声明
- 变量名
- 类型声明符
- 声明的类型
- 分配符号
- 价值
- Cast 运算符
- 演员类型
所以
| 1 | 2 |3| 4 |5| 4 | 5 | 6
let foo : Foo = {} as any;
let foo : Foo | any = {};
所以第一个语句 not 允许 any
作为存储在变量 (2) 中的值的类型 (4),而第二个语句则允许。
假设我有一个包含许多变量的接口,并且我不想在使用它时初始化所有变量,所以我只放置了 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!
它们不一样。您必须查看编译器如何分解每个语句。
- 声明
- 变量名
- 类型声明符
- 声明的类型
- 分配符号
- 价值
- Cast 运算符
- 演员类型
所以
| 1 | 2 |3| 4 |5| 4 | 5 | 6
let foo : Foo = {} as any;
let foo : Foo | any = {};
所以第一个语句 not 允许 any
作为存储在变量 (2) 中的值的类型 (4),而第二个语句则允许。