为什么TypeScript在强制转换时不抱怨状态中未包含的属性?

为什么TypeScript在强制转换时不抱怨状态中未包含的属性?,typescript,Typescript,为什么TypeScript的行为和我的情况一样 如果我直接键入对象,它会抱怨接口中未定义的属性。但是如果我强制转换对象,它允许添加任何未在接口中定义的随机属性 最好用一个例子来解释: interface House { windows: number; garden: boolean; } const house1: House = { windows: 5, garden: true, garage: true // not allowed }; const whate

为什么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?
  }
};
接口室{
窗口:编号;
花园:布尔;
}
警察官邸1:官邸={
窗口:5,
花园:是的,
车库:正确//不允许
};
const whatever={
第二座:{
窗口:3,
花园:是的,
车库:是的//为什么这里允许停车?
}
};
它之所以有效,是因为它是一个。基本上告诉编译器它是什么类型,但不保护它

const house1 = <House> {
  windows: 5,
  garden: true,
  garage: true // allowed
};

你能更清楚地区分“类型转换”和“类型断言”吗?@k0pernikus没有“类型转换”,两个术语之间没有太大区别。Typescript称之为“类型断言”,因为它听起来更像语言框架。除此之外,“强制转换”意味着在其他语言中可能有运行时支持,但在Typescript中它完全是在编译时。好的,有没有一种方法来强制转换它,它不仅告诉编译器它是什么类型,而且还保护它?@mnewmedia补充道。好的,明白了。但由于在现实生活中的应用程序中,house2被一个数组中的对象(无论什么)包裹着。有时它和房子的类型不同。因此,它的行为方式使得它现在比可能的复杂得多。相关:
const whatever: { house2: House } = {
    house2: {
        windows: 3,
        garden: true,
        garage: true // not allowed
    }
};