Когда я смотрю на signature of Object.assign
, я вижу, что он использует типы пересечений, но поведение не то, что я ожидал.TypeScript Object.assign confusion
Я хочу использовать Object.assign
, чтобы объединить некоторые изменения со старым объектом для создания нового объекта (как это принято в JS при использовании неизменяемых шаблонов данных), а TypeScript проверяет правильность частей и результатов, но это Кажется, что TypeScript допускает что-либо без ошибок.
Например:
interface Thing {
name: string;
age: number;
fav: boolean;
}
let oldThing: Thing = {
name: "Aaa",
age: 123,
fav: false
};
let newThing: Thing = Object.assign({}, oldThing, {
name: "Bbb",
age: "abc", // should be type error
fake: "fakey" // should be unknown prop error
});
Почему Object.assign
позволяют это неправильное присвоение Thing
? Есть ли способ приблизить эту работу к тому, что я ожидал?
Вы выполнили все требования, чтобы сделать машинопись компилятор счастливым, но помните, в конце концов, это javascr ipt, который запускает ваш код, а javascript просто не волнует. –
Да, я все время вспоминаю об этом. :) Но вот мой вопрос, почему он * компилирует *? Кажется, что присвоение 'Thing' должно быть ошибкой компиляции этих свойств. Может быть, я не понимаю, как проверяющий тип проверяет назначение. – Aaron