接口中不需要 Typescript 嵌套属性吗?

fum*_*eng 1 typescript

我有一个带有嵌套对象的接口:

export interface Person {
    PersonWrapper: {
        name: string;
        address: string
        email?: string;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试从中创建一个对象,似乎名称不是必需的,但它应该是。它没有在接口中定义为可选属性。我的创建方法如下:

const payload = {
    PersonObj: {
        address: '123 memory lane'
    }
} as Person;
Run Code Online (Sandbox Code Playgroud)

为什么我没有收到编译时错误,指出名称是必需的?如果我忘记将它包装在PersonWrapper中,那么我肯定会收到错误。

won*_*ame 5

由于您没有使用类型注释而是使用类型断言,对于编译器来说,您已经足够接近Person,因此它不会抱怨缺少属性。要修复它,请改用类型注释:

// expected error
const payload: Person = {
  PersonWrapper: {
    address: "123 memory lane",
  },
};
Run Code Online (Sandbox Code Playgroud)

您可以在此处详细了解类型注释和断言之间的区别