typescript - strictNullChecks 导致错误 : hasOwnProperty does not exist for generic types

标签 typescript

我的代码在没有 --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 可以是 nullundefined ,两者都没有 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/

相关文章:

html - 如何获取所选复选框的计数并在 Angular 2 中显示计数?

javascript - 在指令内手动从注入(inject)器获取依赖项

Angular 6 ngrx 商店测试 : cannot read ids of undefined

angular - 如何在 Angular 中生成 UUID

Typescript 将所有枚举值映射为键

javascript - 在 TypeScript 中向 JavaScript 对象添加数据

javascript - 将 stackblitz Angular 版本更新到最新

javascript - 过滤掉 typescript 中接口(interface)不需要的对象属性

reactjs - 无法分配给 'state',因为它是常量或只读属性

javascript - 无法运行 typescript 构建任务: 'C:\Program' is not recognized as an internal or external command