3 回答
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;
TA贡献1891条经验 获得超3个赞
当您的对象具有特定类型时,此解决方案很有用。就像在获取对象到其他来源时一样。
let user: User = new User();
(user as any).otherProperty = 'hello';
//user did not lose its type here.
添加回答
举报