首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript:对象类型的索引签名隐式具有“”any“”类型

TypeScript:对象类型的索引签名隐式具有“”any“”类型
EN

Stack Overflow用户
提问于 2015-12-29 19:02:34
回答 2查看 15.9K关注 0票数 13

我的函数有一个问题:

代码语言:javascript
复制
    copyObject<T> (object:T):T {
        var objectCopy = <T>{};
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                objectCopy[key] = object[key];
            }
        }
        return objectCopy;
    }

我有以下错误:

代码语言:javascript
复制
Index signature of object type implicitly has an 'any' type.

我怎么才能修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-29 19:22:07

代码语言:javascript
复制
class test<T> {
    copyObject<T> (object:T):T {
        var objectCopy = <T>{};
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                objectCopy[key] = object[key];
            }
        }
        return objectCopy;
    }
}

如果我按如下方式运行代码

代码语言:javascript
复制
c:\Work\TypeScript>tsc hello.ts

它工作正常。但是,以下代码:

代码语言:javascript
复制
c:\Work\TypeScript>tsc --noImplicitAny hello.ts

抛出

代码语言:javascript
复制
hello.ts(6,17): error TS7017: Index signature of object type implicitly has an 'any' type.
hello.ts(6,35): error TS7017: Index signature of object type implicitly has an 'any' type.

因此,如果您禁用noImplicitAny标志,它将工作。

似乎还有另一种选择,因为tsc支持以下标志:

代码语言:javascript
复制
--suppressImplicitAnyIndexErrors   Suppress noImplicitAny errors for indexing objects lacking index signatures.

这也适用于我:

代码语言:javascript
复制
tsc --noImplicitAny --suppressImplicitAnyIndexErrors hello.ts

更新:

代码语言:javascript
复制
class test<T> {
    copyObject<T> (object:T):T {
        let objectCopy:any = <T>{};
        let objectSource:any = object;
        for (var key in objectSource) {
            if (objectSource.hasOwnProperty(key)) {
                objectCopy[key] = objectSource[key];
            }
        }
        return objectCopy;
    }
}

此代码无需更改任何编译器标志即可工作。

票数 16
EN

Stack Overflow用户

发布于 2018-12-19 15:15:59

我知道我来晚了,但在当前版本的TypeScript (也许2.7及更新版本)中,你可以像下面这样写。

代码语言:javascript
复制
for (var key in object) {
    if (objectSource.hasOwnProperty(key)) {
        const k = key as keyof typeof object;
        objectCopy[k] = object[k]; // object and objectCopy need to be the same type
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34509636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档