excess 属性 check 有什么帮助?
How excess property check helps?
对于下面的代码,
interface SquareConfig{
color?: string;
width?: number;
}
interface Square{
color: string;
area: number;
}
function createSquare(config: SquareConfig): Square {
let newSquare:Square = {color: "white", area: 100};
if (config.color) {
newSquare.color = config.color;
}
if (config.width) {
newSquare.area = config.width * config.width;
}
return newSquare;
}
below argument(myObj
) 推断为类型 any
允许在编译时由类型检查器作为参数传递。 JS 代码在运行时使用 duck typing。
let myObj = {colour: 'red', width: 100};
let mySquare = createSquare(myObj);
在第二种情况下,以下参数(SquareConfig
类型除外)在编译时不允许通过类型检查器。正如手册中提到的:对象字面量得到特殊处理,并在将它们分配给其他变量或将它们作为参数传递时进行额外的 属性 检查。
let mySquare = createSquare({colour: 'red', width: 100});
在第二种情况下,超额 属性 检查的目的是什么?
What is the purpose of excess property check, in second case?
它可以正确检测错误(如本例所示,color
的拼写错误)而不会产生太多误报。
因为该对象在其他任何地方都没有别名,所以 TypeScript 可以相当确信多余的 属性 不会在代码的其他部分用于其他目的。 myObj
不能这样说 - 我们可能只在此处检查它的 .width
,然后在其他地方使用它的 .colour
。
对于下面的代码,
interface SquareConfig{
color?: string;
width?: number;
}
interface Square{
color: string;
area: number;
}
function createSquare(config: SquareConfig): Square {
let newSquare:Square = {color: "white", area: 100};
if (config.color) {
newSquare.color = config.color;
}
if (config.width) {
newSquare.area = config.width * config.width;
}
return newSquare;
}
below argument(myObj
) 推断为类型 any
允许在编译时由类型检查器作为参数传递。 JS 代码在运行时使用 duck typing。
let myObj = {colour: 'red', width: 100};
let mySquare = createSquare(myObj);
在第二种情况下,以下参数(SquareConfig
类型除外)在编译时不允许通过类型检查器。正如手册中提到的:对象字面量得到特殊处理,并在将它们分配给其他变量或将它们作为参数传递时进行额外的 属性 检查。
let mySquare = createSquare({colour: 'red', width: 100});
在第二种情况下,超额 属性 检查的目的是什么?
What is the purpose of excess property check, in second case?
它可以正确检测错误(如本例所示,color
的拼写错误)而不会产生太多误报。
因为该对象在其他任何地方都没有别名,所以 TypeScript 可以相当确信多余的 属性 不会在代码的其他部分用于其他目的。 myObj
不能这样说 - 我们可能只在此处检查它的 .width
,然后在其他地方使用它的 .colour
。