我有一个嵌套对象的接口:
export interface Person {
PersonWrapper: {
name: string;
address: string
email?: string;
}
}
如果我尝试从它创建一个对象,似乎 name 不是必需的,但它应该是。它在接口中没有定义为可选属性。下面是我如何创建它:
const payload = {
PersonObj: {
address: '123 memory lane'
}
} as Person;
为什么我没有得到编译时错误,说 name 是必需的?如果我忘记将它 Package 在 PersonWrapper 中,那么我肯定会得到错误。
2条答案
按热度按时间wlp8pajw1#
由于您没有使用类型注解,而是使用类型Assert,因此对于编译器来说,您与
Person
足够接近,因此它不会抱怨缺少属性。要修复它,请改用类型注解:您可以在这里阅读更多关于类型注解和Assert之间的区别
u5rb5r592#
TypeScript区分:
1.类型注解
1.类型Assert
根据TypeScript文档,与类型注解(更严格)相比,类型Assert是松散的:
TypeScript只允许类型Assert转换为更具体或更不具体的类型版本。该规则防止“不可能的”强制[…]
SOURCE:https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions