2016-11-02 78 views
0

我試圖創建一個基於以下類型的接口上選擇的對象返回一個對象:如何初始化和單行

interface Option { 
    /** Text for rendering */ 
    label: string; 
    /** Value for searching */ 
    value: string | number; 
    /** 
    * Allow this option to be cleared 
    * @default true 
    */ 
    clearableValue?: boolean; 
} 

是否有可能轉換到下一個單行?

const options = [1, 2, 3].map<Option>((t) => { 
    const option: Option = { label: String(t), value: String(t) }; 
    return option; 
}); 

我想:

const options = [1, 2, 3].map<Option>((t) => Option = { label: String(t), value: String(t) }); 

,但它不工作。

回答

1

就快:

const options = [1, 2, 3].map(t => <Option>{ label: String(t), value: String(t) }); 

類型斷言<Option>{ label: String(t), value: String(t) }也可以用as運營商來完成:t => ({ label: String(t), value: String(t) }) as Option

更新 :正如你已經想出的那樣 - 第一個選項(<Option>)在* .tsx文件中產生歧義,因此as語法是優選的。

+0

第一個建議有一個錯誤:「符號」標籤'無法正確解析,可能位於無法訪問的模塊中「。這是正常的嗎?我正在使用TypeScript 1.8。第二個建議工作正常。 –

+0

嘗試將對象初始值設定項放在括號內'

+0

不,它沒有幫助。也許這在TS2之前不被支持。除非有辦法使其發揮作用,否則可以更新您的回覆來區分這兩個版本,並將其標記爲已接受。 –

0

你可以使用一個打字稿cast

const options = [1, 2, 3].map<Option>((t) => <Option>{ label: String(t), value: String(t) }); 
+0

這會觸發一個錯誤:「符號'標籤'無法正確解析,可能位於無法訪問的模塊中」。這是正常的嗎?我正在使用TypeScript 1.8。 –

+0

我在沒有任何錯誤的打字遊樂場裏試過了。很抱歉,這顯然不適用於您的環境。 – CortoMaltese