![](/img/trans.png)
[英]Typescript: allow a generic type to only be an object with 'string' properties
[英]TypeScript type that enforces only the properties of an object
假設我有以下內容:
const myObj = { foo: 'cat', bar: 'dog', baz: 'bird' } as const;
type MyValue = 'fish' | 'bear' | 'cow';
const myValueMap: Record<string, MyValue> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
} as const;
因為myValueMap
被聲明為帶有任意字符串鍵的 object,所以我們不會對dog
cat
的實際鍵進行類型檢查。 我可以完全刪除顯式聲明,但是我不強制這些值是MyValue
。 (在我的實際代碼中, MyValue
是數百個常量字符串。)
有沒有辦法,最好不使用包裝器 function,強制值是MyValue
並且仍然保持屬性類型檢查?
也許使用更多的 generics -
const myValueMap: Record<myObj[keyof myObj], MyValue> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
};
如果我對您的理解正確,這就是您可以實現所需的方法:
const myObj = { foo: 'cat', bar: 'dog', baz: 'bird' } as const;
type MyValue = 'fish' | 'bear' | 'cow';
const myObjValue = myObj["" as keyof typeof myObj];
const myMap: Partial<Record<typeof myObjValue, MyValue>> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
} as const;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.