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