美文网首页
ts 多余属性

ts 多余属性

作者: 前端早晚自习 | 来源:发表于2023-11-19 15:21 被阅读0次

允许多余属性

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; 

相关文章

网友评论

      本文标题:ts 多余属性

      本文链接:https://www.haomeiwen.com/subject/lllmwdtx.html