Как проверка лишней собственности помогает?
Для приведенного ниже кода,
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
в каком-то другом месте.