我正在尝试创建一个新的type
,其属性由另一个接口组成,同时还要尊重该接口中属性的数据类型。我几乎可以正常工作,但似乎无法弄清楚如何定义数据类型映射。这就是我所拥有的。
interface Person {
name: string;
age: number;
}
interface PersonDataHandler<T> {
value: T;
handler: (prevValue: T) => void;
}
type PersonData<K extends Person> = {
// Here' T should correspond to each data type defined for the property in Person.
[P in keyof K]: PersonDataHandler<T>;
};
这是一个有效声明的例子。
const data: PersonData = {
name: { value: "test", handler: (v: string) => {} },
age: { value: 1, handler: (v: number) => {} }
};
这是无效的,因为value
的类型与name
中Person
的定义类型不匹配。
const data: PersonData= {
name: { value: "test", handler: (v: string) => {} },
age: { value: "1", handler: (v: number) => {} }
};