假设我有这样的类型定义:
name必须具有或fullname已定义财产的人
type Person = {
[k in "name" | "fullname"]: string;
};
Run Code Online (Sandbox Code Playgroud)
假设我想再添加一个必需的属性age,直观上我会写这样的内容:
type Person = {
[k in "name" | "fullname"]: string;
age: number; // This errors
};
Run Code Online (Sandbox Code Playgroud)
然而,这种语法不起作用,唯一的方法是使用交集运算符,&如下所示:
type Person = {
[k in "name" | "fullname"]: string;
} & { age: number };
Run Code Online (Sandbox Code Playgroud)
type Person = {
[k in "name" | "fullname"]: string;
};
Run Code Online (Sandbox Code Playgroud)
是一个映射类型。它是与对象文字类型不同的概念,您可以在对象文字类型中指定每个键的名称和类型。
也许您将映射类型与索引签名混淆了-
type Person = {
[k in "name" | "fullname"]: string;
};
Run Code Online (Sandbox Code Playgroud)
不过,我认为这不是您想要的。您可以使用映射类型并与另一种类型相交,或者显式写出映射 -
type Person = {
age: number;
name: string;
fullname: string;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4562 次 |
| 最近记录: |