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

如果我想以编程方式将属性分配给Javascript中的对象,则可以这样做:


var obj = {};

obj.prop = "value";

但是在TypeScript中,这会产生一个错误:


类型“ {}”的值不存在属性“ prop”


我应该如何在TypeScript中为对象分配任何新属性?


慕无忌1623718
浏览 6132回答 3
3回答

慕哥9229398

可以将表示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"}; // validobj = {} // error. 'requiredProp1' is missingobj.typesafeProp1 = "bar" // error. typesafeProp1 should be a numberobj.prop = "value";obj.prop2 = 88;

万千封印

当您的对象具有特定类型时,此解决方案很有用。就像在获取对象到其他来源时一样。let user: User = new User();(user as any).otherProperty = 'hello';//user did not lose its type here.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript