![](/img/trans.png)
[英]Typescript constrain generic to string literal type for use in computed object property
[英]Constrain a generic type to be a literal type
我的問題是雙重的:
function foo<T is a string literal>(...)
。 我最接近這種行為的是function foo<T extends string>
,但這允許字符串文字的聯合和類型“字符串”本身作為T的值。 我的用例是定義一個像這樣的curried函數prop
:
function prop<K extends string, U>(name: K): <T extends { [P in K]: U }>(obj: T) => T[K] {
return (obj) => obj[name];
}
prop<'name', number>("name")({
name: 3
})
如果K
是字符串文字,則此示例按預期工作,但是功能類型的類型檢查K
是string
。
我知道這有點做作; 請不是我的目標不是解決一個實際問題(盡管它會),而是更多地嘗試使用TypeScript的類型系統。
謝謝!
我認為這里的問題在於你根據通用約束把馬放在馬前:在你知道對象之前嘗試約束允許的鍵是沒有意義的。
這是一個我想你想要完成的例子:
function propGetter<O>(o: O): <K extends keyof O>(key: K) => O[K] {
return k => o[k];
}
let prop = propGetter({
id: 10,
firstName: "Dununuh Hunudunuh"
});
let id = prop("id"); // number
let firstName = prop("firstName"); // string
let foo = prop("foo"); // Type error
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.