CMC*_*kai 5 typescript typescript-generics
我正在尝试写这种类型:
type Pagination<I extends Iterable> = Readonly<{
seek: number;
limit: number;
total: number;
items: I;
}>;
Run Code Online (Sandbox Code Playgroud)
这样用户就可以使用:
Pagination<Map<number, any>>
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,因为Iterable还需要通用参数。
所以我只剩下
type Pagination<I> = Readonly<{
seek: number;
limit: number;
total: number;
items: Iterable<I>;
}>;
Run Code Online (Sandbox Code Playgroud)
尽管这也有效,但类型签名现在Pagination<number>无法进一步限制应该使用哪种类型的迭代。
您可以使用可迭代本身的泛型参数而不是项目类型,T extends Iterable<any>
type Pagination<I extends Iterable<any>> = Readonly<{
seek: number;
limit: number;
total: number;
items: I;
}>;
Run Code Online (Sandbox Code Playgroud)
注意:如果您出于某种原因需要项目类型,您可以使用条件类型来提取它:
type Pagination<I extends Iterable<any>> = Readonly<{
seek: number;
limit: number;
total: number;
items: I;
current: I extends Iterable<infer Item> ? Item: never
}>;
declare let map: Pagination<Map<string, number>>
map.current // [string, number]
declare let arr: Pagination<string[]>
arr.current // string
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |