替换Typescript类型中某些键上的类型
在下面的代码中,我尝试从现有类型创建一个新类型,方法是循环遍历键并仅替换符合条件的键 我在这里也使用联合类型替换Typescript类型中某些键上的类型,typescript,Typescript,在下面的代码中,我尝试从现有类型创建一个新类型,方法是循环遍历键并仅替换符合条件的键 我在这里也使用联合类型 class A{} B类{ 构造函数(公共a:a,公共n:number,公共aa:a[]){} } X型=A | B型 类型ReplaceKeyTypes={ [Key in keyof Type]:键扩展X?NewKeyType:类型[Key] } 常数a:a=新的a() 常数b:b=新的b(a,1,[a,a]) 常量c:ReplaceKeyTypes={ a:‘测试’, n:2, a
class A{}
B类{
构造函数(公共a:a,公共n:number,公共aa:a[]){}
}
X型=A | B型
类型ReplaceKeyTypes={
[Key in keyof Type]:键扩展X?NewKeyType:类型[Key]
}
常数a:a=新的a()
常数b:b=新的b(a,1,[a,a])
常量c:ReplaceKeyTypes={
a:‘测试’,
n:2,
aa:['xyz']
}
这给了我最后几行代码中的以下错误:
- 类型“number”不可分配给类型“string”
- 类型“string[]”不可分配给类型“string”
密钥扩展X
”的数字时,c.n
为什么会更改为字符串c.aa
应该从X[]
更改为string[]
似乎在执行
Key in keyof Type
时,您会得到文本键,即命名键的字符串。我忘记了使用type[key]
来获取键的值。为了修复并支持阵列案例,我提出了以下建议:
type ReplaceKeyTypes={
[Key-in-keyof-Type]:类型[Key]扩展X[]
?NewKeyType[]
:键入[键]扩展X
?新钥匙类型
:键入[键]
}
我明天可以更仔细地看一看,但是“关键点扩展了X”“这没有什么意义,因为您正在将密钥本身与接口的联合进行比较。您试图替换的实际情况是什么?谢谢Linda!我设法找到了错误并在下面发布了一个错误,但是如果您想查看它并告诉我是否有任何改进,我将非常高兴。再次感谢您。”在里面