TypeScript如何定义有序迭代器类型?扩展AxiosResponse遇类型问题
问题:如何让迭代器/生成器类型保持解构时的类型顺序?
我尝试定义可用于解构且保留类型顺序的迭代器类型,写法如下:
interface TestIterator { 0: boolean; 1: any; 2: "abc"; length: 3; [Symbol.iterator]: typeof Array.prototype[Symbol.iterator]; } // 期望构建可解构且保持类型顺序的迭代器类型 const arr: TestIterator = [true, {}, "abc"] // 但a1、a2、a3无法获取对应位置的正确类型 const [a1, a2, a3] = arr
之后我测试了生成器,发现生成器同样无法保留类型顺序:
function *gen() { yield "abc"; yield true; yield 123; } const view_inference_type = gen(); // 生成器类型为:Generator<true | "abc" | 123, void, unknown> const [g1, g2, g3] = view_inference_type; // g1、g2、g3的类型均为true | "abc" | 123,不符合有序类型的预期
我的实际需求是通过接口合并扩展Axios的AxiosResponse接口,让它支持解构且保留类型顺序,但当前方法无法得到正确类型,元组方案不符合需求:
declare module "axios" { interface AxiosResponse { 0: boolean; 1: any; 2: "async_try"; length: 3; [Symbol.iterator]: Array[Symbol.iterator]; } }
请问是否有办法让迭代器或生成器的类型保持顺序,或是手动指定类型顺序?
内容的提问来源于stack exchange,提问作者Autumn
相关产品推荐
相关产品推荐

