Aeg*_*gis 5 typescript typescript2.0
我的问题有两个:
function foo<T is a string literal>(...)。我最接近这种行为的是function foo<T extends string>,但这允许字符串文字和类型“string”本身作为 T 的值的联合。我的用例是定义一个柯里化函数,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
})
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |