Для приведенного ниже кода,
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});
Какова цель проверки избыточного имущества во втором случае?