簡體   English   中英

我是否必須使用接口來使用typescript定義對象的元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM