Sar*_*hah 6 typescript typescript-generics
我想合并两种类型并保持泛型有效。例如
类型 1
interface Request<P extends core.Params = core.ParamsDictionary, ResBody = any, ReqBody = any, ReqQuery = core.Query> extends core.Request<P, ResBody, ReqBody, ReqQuery> { }
Run Code Online (Sandbox Code Playgroud)
类型 2
type Auth = {
user: User
}
Run Code Online (Sandbox Code Playgroud)
我希望我的新类型是这两者的合并,其中类型可以接收所有这些泛型。
现在我只是合并它们,但后来我无法使用该Request类型的泛型。
目前我只是合并这两个。
export type Merge<FirstType, SecondType> = Omit<FirstType, keyof SecondType> & SecondType;
Run Code Online (Sandbox Code Playgroud)
当然我可以手动完成所有这些,但是这种情况在我的项目中重复出现,我想要一个可以为我完成此操作的实用方法。例如
MergeWithGenerics<Request, Body>
Run Code Online (Sandbox Code Playgroud)
新类型保留第一个 arg 的所有泛型。
我不知道它是否可能,但如果有人能帮我解决这个问题,那就太好了。
您不能将泛型类型(不带参数)传递给另一个泛型类型。
interface Generic<P> { }
type Id<T> = T
type G = Id<Generic>; // Generic type 'Generic<P>' requires 1 type argument(s).(2314)
Run Code Online (Sandbox Code Playgroud)
话虽如此,您的定义Merge似乎是您想要做的事情的一个很好的速记。Merge<Request<Params, ResBody, ReqBody, Query> & Auth>那么看起来并没有大很多RequestWithAuth<Params, ResBody, ReqBody, Query>。
@leonardfactory 提案的一个变体也可能会简化一些:
type ExtendedRequest<Extension, P, TRes, TReq, TQuery> = Merge<Request<P, TRes, TReq, TQuery>, Extension>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |