簡體   English   中英

"TypeScript - 如何將索引簽名表示為泛型類型"

[英]TypeScript - How to represent an index signature as a generic type

TypeScript 中的索引簽名是這樣定義的:

字典

[key: string]: T

很酷的問題!
我認為原因是這對於編譯器而言實際上是一個尚未實現的邊緣情況可能因為它不值得努力。

index屬性鍵只能是明顯的數字,而對象屬性鍵只能是字符串或數字。 所以最后你的約束只說明了什么是事實,以及編譯器需要通過特殊情況處理什么。
所以我再次假設聖安德斯放棄了這種努力;-)

但為什么不這樣做呢

type StrIndex<TValue> = {
    [key: string]: TValue
}

type NumIndex<TValue> = {
    [key: number]: TValue
}

foo(obj: StrIndex<Bar>)
foo(obj: StrIndex<Bar> & Fooable<string>)

它不像你的解決方案那樣整潔,但作為折衷方案,它似乎特別好,因為XXXIndex類型的集合限制為2

一種替代解決方案是使用Record<\/code>實用程序。

foo(obj: Record<string, Bar>)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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