Как проверка лишней собственности помогает? - PullRequest
0 голосов
/ 02 мая 2018

Для приведенного ниже кода,

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;
}

ниже аргумента (myObj), выведенного как тип any, разрешено передавать в качестве аргумента средством проверки типов во время компиляции. JS-код использует утку во время выполнения.

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

let mySquare = createSquare(myObj);

Во втором случае аргумент ниже (кроме SquareConfig type) не разрешен для проверки типа во время компиляции. Как упомянуто в справочнике: Литералы объекта получают специальную обработку и подвергаются избыточной проверке свойств при назначении их другим переменным или передаче их в качестве аргументов.

let mySquare = createSquare({colour: 'red', width: 100});

Какова цель проверки избыточного имущества во втором случае?

1 Ответ

0 голосов
/ 03 мая 2018

Какова цель проверки избыточного имущества, во втором случае?

Он правильно обнаруживает ошибки (как показано в данном случае, неправильное написание color), не создавая слишком много ложных срабатываний.

Поскольку объект не является псевдонимом где-либо еще, TypeScript может быть достаточно уверен, что избыточное свойство не будет использоваться для других целей в какой-либо другой части кода. То же самое нельзя сказать о myObj - мы можем проверять его только на наличие здесь .width, но затем использовать его .colour в другом месте.

...