Typescript 仅允许映射类型中的一个属性
假设有这种类型:Typescript 仅允许映射类型中的一个属性,typescript,mapped-types,Typescript,Mapped Types,假设有这种类型: type A = { prop1: string; prop2: string; } 然后可以构造一个类型B,这样a的所有属性都必须在B中,如下所示: type B = { [k in keyof A]: number } 但是我如何构造B,使得A的只有一个属性必须存在呢?好的,我们可以这样做,但它不是微不足道的。简单的方法是找出我们的类型是否至少有一个键 type AtLeastOneProp=(keyof X和keyof模式)从不扩展?从不:X //使用 t
type A = {
prop1: string;
prop2: string;
}
然后可以构造一个类型B
,这样a
的所有属性都必须在B
中,如下所示:
type B = {
[k in keyof A]: number
}
但是我如何构造
B
,使得A的只有一个属性必须存在呢?好的,我们可以这样做,但它不是微不足道的。简单的方法是找出我们的类型是否至少有一个键
type AtLeastOneProp=(keyof X和keyof模式)从不扩展?从不:X
//使用
type B=AtLeastOneProp//我认为没有办法做到这一点。要使其工作,您需要一种方法来“分离”并集中的元素,我的意思是,keyof a
是字符串的并集,您需要从中获取一个字符串,我认为这是不可能的。如果你确切地知道A
中的属性,你可以做一个union{prop1:number}{124;{prop2:number}
,否则我会说这是不可能的,似乎答案可以给你想要的。哇,这是个好主意!我想我需要一些时间来完全理解这里发生了什么……我承认这很复杂,但它确实很有用:)谢谢!