【发布时间】:2017-05-23 21:17:53
【问题描述】:
swagger-api/swagger-codegen 生成如下代码:
private extendObj<T1,T2>(objA: T1, objB: T2) {
for(let key in objB){
if(objB.hasOwnProperty(key)){
objA[key] = objB[key];
}
}
return <T1&T2>objA;
}
编译时会报错:
TS2536:类型“keyof T2”不能用于索引类型“T1”
有人可以解释为什么一个对象的密钥不能用于访问另一个对象的字段吗?密钥是否被推断为某种特殊类型?
在打字稿中复制对象属性的正确方法是什么?
【问题讨论】:
-
如果不能保证键的类型相同,我可以看到编译器有问题。如果将
key的类型指定为泛型会怎样? -
如果另一个 keyX 被声明在循环之外,它就可以工作。但这很奇怪。如果它抱怨价值,我会理解,但这是关键。
标签: typescript