为了账号安全,请及时绑定邮箱和手机立即绑定

如何在TypeScript中为对象动态分配属性?

如何在TypeScript中为对象动态分配属性?

慕无忌1623718 2019-10-05 15:11:57
如果我想以编程方式将属性分配给Javascript中的对象,则可以这样做:var obj = {};obj.prop = "value";但是在TypeScript中,这会产生一个错误:类型“ {}”的值不存在属性“ prop”我应该如何在TypeScript中为对象分配任何新属性?
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

可以将表示obj为any,但这违背了使用打字稿的全部目的。obj = {}暗示obj是一个Object。将其标记为any没有任何意义。为了实现期望的一致性,可以如下定义接口。


interface LooseObject {

    [key: string]: any

}


var obj: LooseObject = {};

或使其紧凑:


var obj: {[k: string]: any} = {};

LooseObject可以接受带有任何字符串的字段作为键并any输入类型作为值。


obj.prop = "value";

obj.prop2 = 88;

该解决方案的真正优雅之处在于,您可以在界面中包含类型安全字段。


interface MyType {

    typesafeProp1?: number,

    requiredProp1: string,

    [key: string]: any

}


var obj: MyType ;

obj = { requiredProp1: "foo"}; // valid

obj = {} // error. 'requiredProp1' is missing

obj.typesafeProp1 = "bar" // error. typesafeProp1 should be a number


obj.prop = "value";

obj.prop2 = 88;


查看完整回答
反对 回复 2019-10-05
?
万千封印

TA贡献1891条经验 获得超3个赞

当您的对象具有特定类型时,此解决方案很有用。就像在获取对象到其他来源时一样。


let user: User = new User();

(user as any).otherProperty = 'hello';

//user did not lose its type here.


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 6131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信