如何在另一个函数的类型签名中使用泛型类型?

问题描述 投票:0回答:1

我定义了这三个助手:

export type IdType = PropertyKey;
export type Identifiable<T> = T & {id: IdType};
export type IdGetter<T> = (x: Identifiable<T>) => IdType;

我希望能够使用

IdGetter
泛型来键入泛型方法,例如(这不起作用,但这是我希望能够做的事情):

export const getId<T>: IdGetter<T> = x => x.id

但是我必须写:

export const getId = <T>(x: Identifiable<T>): IdType => x.id;

这没什么大不了的,我仍然可以做这样的事情并且没有类型错误:

const f = <U, F extends IdGetter<U>>(getter: F) => (x: Identifiable<U>): IdType => getter(x);
f(getId);

但是定义这些

getters
的类型是多余的。

有没有一种干净的方法来完成我正在寻找的事情?我正在努力更好地使用泛型。

typescript
1个回答
0
投票

您可以使用内联类型断言方法直接断言 getId 的类型与 IdGetter 匹配:

export const getId: <T>(x: Identifiable<T>) => IdType = x => x.id;

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.