[英]Do I have to use an interface to define the elements of an object with typescript?
我可以做這個:
var a: number = 99;
但我怎么能定義a
當它是一個對象中:
var ob = { a: 99 }
要么
class AClass {
ob = { a: 99 };
constructor() {
}
}
使用界面是唯一的方法嗎?
不需要接口。 如果你只想定義對象的“形狀”,而沒有顯式的類/接口聲明,你可以這樣做:
var ob: { a:number } = {a: 99};
在您的類示例中,它看起來像這樣:
class AClass {
ob: { a:number } = { a: 99 };
constructor() {
// tsc knows that this.ob.a is of type number
}
}
這也適用於復雜的對象:
var ob: {
a:number;
b: {
stringVal:string;
numero:number;
bitflag:Boolean
}
} = {
a: 99,
b: {
stringVal: "Some string value here",
numero:1234,
bitflag:true
}
};
在您知道您期望具有特定屬性的對象的函數聲明中,此語法非常有用:
function(someObject: {stringVal:string; numero:number})
// TypeScript now knows that someObject will have a "stringVal" string property, and a "numero" number property
}
現在,說了這些,我建議你仔細考慮界面是否更適合。 如果這是一個簡單的物體形狀,這不會再發生一次性的情況下,宣布形狀的內聯(如上所述)可能被罰款,但如果你曾經打算具有相同形狀的物體在其他地方,它將它聲明為接口可能是有意義的,然后您可以重新使用該接口。 如果你正在處理一個深層次的復雜對象,這是雙重的。 嘗試全部內聯可能會變得非常丑陋。
你可以定義一個這樣的類:
var a: number = 99;
class Ob{
constructor(public a: number){}
}
var newOb = new Ob(a);
newOb.a // should equal 99 then.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.