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 - Fatal编程技术网

替换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!我设法找到了错误并在下面发布了一个错误,但是如果您想查看它并告诉我是否有任何改进,我将非常高兴。再次感谢您。”在里面