多余的财产检查有何帮助?

ove*_*nge 3 duck-typing typescript ecmascript-6

对于以下代码,

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;
}
Run Code Online (Sandbox Code Playgroud)

下面的参数(myObj)推断为类型any允许在编译时由类型检查器作为参数传递.JS代码在运行时使用duck typing.

let myObj = {colour: 'red', width: 100};

let mySquare = createSquare(myObj);
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,下面的参数(除了SquareConfig类型)在编译时不允许通过类型检查器传递.如手册中所述:对象文字在将其分配给其他变量或将它们作为参数传递时,会得到特殊处理并进行多余的属性检查.

let mySquare = createSquare({colour: 'red', width: 100});
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,超额财产检查的目的是什么?

Rya*_*ugh 5

在第二种情况下,超额财产检查的目的是什么?

它可以正确地检测错误(如本例所示,拼写错误color),而不会产生太多的误报.

由于该对象在其他任何地方都没有别名,因此TypeScript可以相当确信多余属性不会在代码的其他部分用于其他目的.同样不能说myObj- 我们可能只是在.width这里检查它,然后.colour在其他地方使用它.

  • 因为对象在其他任何地方都没有别名,所以 TypeScript 可以相当确信多余的属性不会在代码的其他部分用于不同的目的。不能说 myObj 相同——我们可能在这里只检查它的 .width ,然后在其他地方使用它的 .colour 。 (2认同)