มันเป็นไปได้ที่จะแสดงobj
ว่าเป็นany
แต่เอาชนะจุดประสงค์ทั้งหมดของการใช้ typescript 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;
ความงดงามที่แท้จริงของโซลูชันนี้คือคุณสามารถรวมฟิลด์ typesafe ในอินเทอร์เฟซ
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;
ในขณะที่คำตอบนี้เป็นคำถามดั้งเดิมคำตอบที่ @GreeneCreations อาจให้มุมมองเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหา