2017-09-12 26 views
0

下面是函數簽名,如何定義對象主要爲字符串類型

export function getVideoBooleansParamsString(videoBooleans: { 
    string: { label: string; value: boolean } 
}): string {} 

這是arg我試圖進入,

const videoBooleans = { video: { label: 'video', value: true } } 

而且它產生以下錯誤,

(63,33): error TS2345: Argument of type '{ exchange: { filterType: string; filterValues: string[]; }; }' is not assignable to parameter of type '{string: FilterModel; }'. 
    Property 'string' is missing in type '{ exchange: { filterType: string; filterValues: string[]; }; }'. 

我打算聲明的是一個對象,無論密鑰是否具有內容{ label: string; value: boolean }

回答

3

你現在所定義的方式希望以下內容:

const videoBooleans = { string: { label: 'video', value: true } }; 

getVideoBooleansParamsString(videoBooleans); 

您可以定義它像這樣,如果你想關鍵是任意的字符串:

export function getVideoBooleansParamsString(videoBooleans: { 
    [key: string]: { label: string; value: boolean } 
}): string { } 

還是這個樣子,更具體:

export function getVideoBooleansParamsString(videoBooleans: { 
    video: { label: string; value: boolean } 
}): string { } 

您也可以定義一個接口,它可以使函數簽名有點清潔:

interface MyVideoType { 
    [key: string]: { label: string, value: true }; 
} 

export function getVideoBooleansParamsString(videoBooleans: MyVideoType): string { } 

const video: MyVideoType = { video: { label: 'video', value: true } }; 

getVideoBooleansParamsString(video); 
1

您需要定義一個索引你的參數類型:

export function getVideoBooleansParamsString(videoBooleans: { 
    [name :string] : { label: string; value: boolean } 
}): string {} 
相關問題