【发布时间】:2020-12-17 06:27:40
【问题描述】:
帮助定义泛型,它接受Object with type T 和K property key in T 并返回类型为T。
我试图弄清楚如何用 TypeScript 4 解决它:
- 它解决了问题,但返回
object。这不是很好的解决方案。
type WithProp<TKey extends string> = { [K in TKey]: object };
- 相同,但返回
any。最好写T[K]之类的东西,但是TS说TS2536: Type 'K' cannot be used to index type 'T'。
type WithProp<T, K extends string | number> = T & {[keyToSort in K]: any};
用法:
const prop = <K extends string | number>(prop: K) => <T>(model: WithProp<T, K>) => model[prop];
const x = {foo: 'bar', baz: 'qux'};
typeof prop('foo')(x) === typeof x.foo;
并且在x 上使用任何键('foo' 或'baz' 除外)调用助手必须抛出错误。
请帮忙写一个助手。
【问题讨论】:
-
你能在TypeScript Playground提供一个(失败的)例子
-
const prop = <K extends string | number>(prop: K) => <T extends {[P in K]: any}>(model: T): T[K] => model[prop]; -
@Qurben 我已经提供了。
标签: javascript typescript typescript-generics