Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: overexchangeОтветов: 1

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

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) не может проходить проверку типа во время компиляции. Как упоминалось в руководстве: Литералы объектов обрабатываются особым образом и подвергаются избыточной проверке свойств при назначении их другим переменным или передаче их в качестве аргументов.

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

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

typescriptecmascript-6duck-typing

Ответы

Ответ 1 · рейтинг 7 · Ryan Cavanaugh

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы