假设我有这样一个类型定义:
必须定义name
或fullname
属性的人员
type Person = {
[k in "name" | "fullname"]: string;
};
假设我想再添加一个必需的属性age
,直觉上我会这样写:
type Person = {
[k in "name" | "fullname"]: string;
age: number; // This errors
};
然而,这种语法将不工作,唯一的方法是使用相交操作符&
,像这样:
type Person = {
[k in "name" | "fullname"]: string;
} & { age: number };
我错过的东西或交集是唯一的方法来定义这个额外的属性在映射类型的顶部?
操场这里
type Person = {
[k in "name" | "fullname"]: string;
};
是一个映射类型。它是与对象文字类型不同的概念,对象文字类型指定每个键的名称和类型。
也许你混淆了映射类型和索引签名-
type Person = {
age: number;
[k: string]: string | number;
};
不过,我不认为这是你想要的。您要么使用映射类型并与另一类型相交,要么显式地写出映射-
type Person = {
age: number;
name: string;
fullname: string;
};