我的代码在没有 --strictNullChecks 的情况下运行良好。
启用--strictNullChecks时,出现如下错误:
类型“T1”上不存在属性“hasOwnProperty”。
类型“T2”上不存在属性“hasOwnProperty”。
function extend<T1, T2>(arg1: T1, arg2: T2): T1 & T2 {
const result: Partial<T1 & T2> = {};
for (const prop in arg1) {
if (arg1.hasOwnProperty(prop)) { // error when using --strictNullChecks
(result as T1)[prop] = arg1[prop];
}
}
for (const prop in arg2) {
if (arg2.hasOwnProperty(prop)) { // error when using --strictNullChecks
(result as T2)[prop] = arg2[prop];
}
}
return result as T1 & T2;
}
最佳答案
由于它们是无界泛型,T1 或 T2 可以是 null
或 undefined
,两者都没有 hasOwnProperty
。
您需要将它们标记为扩展对象:
function extend<T1 extends object, T2 extends object>(arg1: T1, arg2: T2): T1 & T2 {
// ---------------^^^^^^^^^^^^^^^-----^^^^^^^^^^^^^^
const result: Partial<T1 & T2> = {};
for (const prop in arg1) {
if (arg1.hasOwnProperty(prop)) { // error when using --strictNullChecks
(result as T1)[prop] = arg1[prop];
}
}
for (const prop in arg2) {
if (arg2.hasOwnProperty(prop)) { // error when using --strictNullChecks
(result as T2)[prop] = arg2[prop];
}
}
return result as T1 & T2;
}
关于typescript - strictNullChecks 导致错误 : hasOwnProperty does not exist for generic types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336678/