Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 仅允许映射类型中的一个属性_Typescript_Mapped Types - Fatal编程技术网

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}
,否则我会说这是不可能的,似乎答案可以给你想要的。哇,这是个好主意!我想我需要一些时间来完全理解这里发生了什么……我承认这很复杂,但它确实很有用:)谢谢!