3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以將表示obj為any,但這違背了使用打字稿的全部目的。obj = {}暗示obj是一個(gè)Object。將其標(biāo)記為any沒(méi)有任何意義。為了實(shí)現(xiàn)期望的一致性,可以如下定義接口。
interface LooseObject {
[key: string]: any
}
var obj: LooseObject = {};
或使其緊湊:
var obj: {[k: string]: any} = {};
LooseObject可以接受帶有任何字符串的字段作為鍵并any輸入類型作為值。
obj.prop = "value";
obj.prop2 = 88;
該解決方案的真正優(yōu)雅之處在于,您可以在界面中包含類型安全字段。
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貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)您的對(duì)象具有特定類型時(shí),此解決方案很有用。就像在獲取對(duì)象到其他來(lái)源時(shí)一樣。
let user: User = new User();
(user as any).otherProperty = 'hello';
//user did not lose its type here.
添加回答
舉報(bào)