首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非特定属性并在TypeScript中键入此属性?

非特定属性并在TypeScript中键入此属性?
EN

Stack Overflow用户
提问于 2015-10-04 10:20:17
回答 2查看 52关注 0票数 0

输入

代码语言:javascript
复制
const obj = {
    foo: function() {
        this.car = 4;
        this.can("far");
    },
    bar: function() {
        this.caz = ["fa", "ba"];
        this.car = 7;
    }
}

尝试

代码语言:javascript
复制
interface IObj {
    [index: string]: IObjVar;
}

interface IObjVar {
    car?: number;
    can(arg: string)?: void;
    caz?: string[];
}

然而,这不能带来代码完成。我想输入car/can/cazthis.来显示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-04 10:55:07

你所要求的东西是不可能的,除非第3694期是固定的。函数中不属于类声明的this的类型始终是any。最好的方法是将this化名为具有正确类型的其他变量:

代码语言:javascript
复制
const obj = {
    foo: function() {
        const self: IObjVar = this;
        self.car = 4;
        self.can("far");
    },
    bar: function() {
        const self: IObjVar = this;
        self.caz = ["fa", "ba"];
        self.car = 7;
    }
};

或者您可以始终显式地转换this

代码语言:javascript
复制
const obj = {
    foo: function() {
        (<IObjVar> this).car = 4;
        (<IObjVar> this).can("far");
    },
    bar: function() {
        (<IObjVar> this).caz = ["fa", "ba"];
        (<IObjVar> this).car = 7;
    }
};
票数 1
EN

Stack Overflow用户

发布于 2015-10-05 01:21:25

如果您想变得有点枯燥(不要重复),可以使用type声明来捕获变量的类型。样本:

代码语言:javascript
复制
const obj = {
    foo: function() {
        let self: ObjType = this;
        self.car = 4;
        self.can("far");
    },
    bar: function() {
        let self: ObjType = this;
        self.caz = ["fa", "ba"];
        self.car = 7;
    },

    car: 123,
    caz: [],
    can: function(x:string){}
}

type ObjType = typeof obj;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32932425

复制
相关文章

相似问题

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