簡體   English   中英

typescript 如何將泛型類型的鍵約束為僅字符串

[英]typescript How to constrain the key of a generic type to be string only

我想要一個通用類型OnlyStringKey<T>如下所示。

   //This line has no compile errors
    let x: OnlyStringKey<{whatEverJustString1: 1, whatEverJustString2: '' }>;
    
    //This line has error. Because key 2 is a number but a string
    let x: OnlyStringKey<{whatEverJustString1: 1, 2: '' }>;
    
    //This line has error too. Because key symbol.search is symbole but a string
    let x: OnlyStringKey<{whatEverJustString1: 1, [Symbol.search]: '' }>;

我嘗試了幾種方法。 而且它們都不起作用

您可以將以下約束添加到OnlyStringKey

type OnlyStringKey<
  T extends Record<string, any> & Record<number | symbol, never> 
> = T

這將確保所有numbersymbol鍵只能具有never類型。


操場

我不認為類型可以同時受到約束和通用,但您可能想要OnlyStringKey: Record<string, any> or OnlyStringKey:{ [key: string]: any }

暫無
暫無

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

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