TS 类型:至少传一个属性 与 只允许传入一个属性
您的问题描述不够清晰,但我猜测您可能想要创建一个TypeScript类型,该类型要求对象至少包含一个特定的属性,同时确保对象只能有一个这样的属性。
下面是一个简单的例子,其中定义了一个AtLeastOne
类型,它要求对象至少包含一个type
属性,并且确保type
是对象中唯一的属性。
type AtLeastOne<T, U = { [K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U];
// 使用示例
type Example = AtLeastOne<{
type: 'A';
a: string;
} | {
type: 'B';
b: string;
}>;
// 使用Example类型的对象至少需要有一个type属性
// 下面的对象是合法的
const obj1: Example = {
type: 'A',
a: 'a string',
};
// 下面的对象也是合法的,因为它至少有一个type属性
const obj2: Example = {
type: 'B',
};
// 下面的对象是不合法的,因为它没有type属性
// const obj3: Example = {
// a: 'a string',
// };
// 下面的对象是不合法的,因为它有两个type属性
// const obj4: Example = {
// type: 'A',
// type: 'B',
// a: 'a string',
// };
在这个例子中,AtLeastOne
类型接受一个联合类型T
作为参数,要求对象至少包含T
中的一个属性。然后使用了条件类型和泛型来创建一个新的类型U
,该类型包含T
中每个属性的类型,并且每个属性都是Pick
类型的实例,即只保留指定的属性。最后,使用了Partial
类型来允许其他属性的存在,并且通过交叉操作Partial<T>
和U[keyof U]
来确保type
是唯一的属性。
评论已关闭