为什么TypeScript在投射时不抱怨状态中不包含的属性?

时间:2019-06-27 12:07:46

标签: typescript

为什么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 个答案:

答案 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
    }
};