【发布时间】:2022-11-23 20:06:51
【问题描述】:
我有一个通用接口,它接受一个必须扩展另一个通用类型的类型参数。 例如 :
export interface IPoint<TX, TY>
{
x: TX;
y: TY;
}
export interface ISeries<TPoint extends IPoint>
{
points: Array<TPoint>;
}
在这里,我必须为IPoint指定TX和TY。
我的问题是:有没有办法自动推断这些类型,例如像这样?
export interface ISeries<TPoint extends IPoint<infer TX, infer TY>>
{
points: Array<TPoint>;
}
我现在发现的唯一方法是添加TX和TY作为ISeries的类型参数,但这很不切实际,因为每次使用接口时我都必须指定这三种类型.
我也可以使用IPoint<any, any>,但是我丢失了关于x 和y 的真实类型的信息。
编辑:为了澄清我想要实现的目标,让我们考虑以下示例:
export interface ISeries<TPoint extends IPoint<infer TX, infer TY>>
{
points: Array<TPoint>;
transformYValues?: (yValue: TY) => number;
}
在这里我需要TY来强类型transformYValues。
谢谢你的帮助
【问题讨论】:
-
如果 this 适合你,请告诉我。请记住,推理机制仅适用于通用条件类型和函数参数
-
你将如何使用这种类型?我不清楚
x和y会在哪里提供。通过“推理”,我理解将类型分解为其成分,例如T extends Array<infer U> ? U : never或<U>(a: Array<U>) => void从Array<Something>中提取U。在第一种情况下,来源是T,在第二种情况下,它是a -
@captain-yossarianfromUkraine 我编辑了问题以添加用例示例,也许这有助于澄清我的问题。谢谢
标签: typescript typescript-generics