为什么TypeScript在我的情况下会表现得如此?
如果我直接键入一个对象,它会抱怨接口中未定义的属性。但是,如果我强制转换为对象,则可以添加接口中未定义的任何随机属性。
最佳示例说明:
interface House {
windows: number;
garden: boolean;
}
const house1: House = {
windows: 5,
garden: true,
garage: true // not allowed
};
const whatever = {
house2: <House> {
windows: 3,
garden: true,
garage: true // why is it here allowed?
}
};
答案 0 :(得分:3)
它有效,因为它是Type Assertion。基本上告诉编译器是什么类型,但不保护它,例如
const house1 = <House> {
windows: 5,
garden: true,
garage: true // allowed
};
基本上,您告诉ts-compiler不要对数据进行特殊检查或重组。
您将使用属性的适当类型来输入保护它,例如
const whatever: { house2: House } = {
house2: {
windows: 3,
garden: true,
garage: true // not allowed
}
};