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.
添加回答
舉報