Как проверка лишней собственности помогает?

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

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 ответ

Решение

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

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

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

Другие вопросы по тегам