允许多余属性
1.使用类型断言
01 const point: { x: number } = { x: 0, y: 0 };
02 // ~~~~
03 // y是多余属性
01 // 无编译错误
02 const p0: { x: number } = { x: 0, y: 0 } as { x: number };
03
04 // 无编译错误
05 const p1: { x: number } = { x: 0, y: 0 } as { x: 0; y: 0 };
2. 启用“--suppressExcessPropertyErrors”编译选项。
启用该编译选项能够完全禁用整个TypeScript工程的多余属性检查,但同时也将完全失去多余属性检查带来的帮助。我们可以在tsconfig.json配置文件中或命令行上启用该编译选项。
01 {
02 "compilerOptions": {
03 "suppressExcessPropertyErrors": true
04 }
05 }
3. 使用“// @ts-ignore”注释指令。
该注释指令能够禁用针对某一行代码的类型检查。
01 // @ts-ignore
02 const point: { x: number } = { x: 0, y: 0 };
4. 为目标对象类型添加索引签名。
若目标对象类型上存在索引签名,那么目标对象可以接受任意属性,因此也就谈不上多余属性。
01 const point: {
02 x: number;
03 [prop: string]: number; // 索引签名
04 } = { x: 0, y: 0 };
5. 源对象类型不为“全新的对象字面量类型”,于是编译器将不执行多余属性检查。
最后一种方法也许不是很好理解。如果我们先将对象字面量赋值给某个变量,然后再将该变量赋值给目标对象类型,那么将不会执行多余属性检查。这种方法能够生效的原理与类型断言类似,那就是令源对象类型不为“全新的对象字面量类型”,于是编译器将不执行多余属性检查。下面代码的第4行,赋值语句右侧不是对象字面量,而是一个标识符,因此temp的类型不是“全新的对象字面量类型”:
01 const temp = { x: 0, y: 0 };
02
03 // 无编译错误
04 const point: { x: number } = temp;
网友评论