你想
- 的東西,抓住了字符串文字作爲串的工會文字類型和
- 東西,可以採取文字類型的聯合,並創建一個對象的。
(1)可以與一類參數來完成(即,一個通用的)約束到string
,和(2)可以用映射類型來完成 - 它只是恰巧打字稿於映射的類型,稱爲Record<K, T>
與它:
interface Foo {
bar<K extends string>(keys: K[], handler: (parameter: Record<K, any>) => void): void;
}
var x: Foo;
x.bar(['First', 'Second'], x => {
console.log(x.First);
console.log(x.);
});
請記住,但是,如果有人在一個空數組或其他東西比一個字符串傳遞(如string
類型的變量),那麼你會得到沒有類型安全。您將可以訪問x
上的任何物業。
「給出一個空數組時,推斷空的工會,而不是string
」您可以通過添加的never
通用默認說得到周圍的空數組情況:
interface Foo {
bar<K extends string = never>(keys: K[], handler: (parameter: Record<K, any>) => void): void;
}