【问题标题】:Typescript: extending IterableIterator for array type but return a simple typeTypescript:为数组类型扩展 IterableIterator 但返回一个简单类型
【发布时间】:2020-09-12 10:23:07
【问题描述】:

我正在尝试使用类似于Array.flat() 的方法扩展IterableIterator。自己写方法没问题,扩展IterableIterator的接口也很简单。所以javascript部分是受控的。不幸的是,我无法让 typescript 编译器理解我想要什么。

我应该如何在 IterableIterator 中声明 Flatten 以便打字稿将项目理解为 number 而不是像现在这样的 number[]

注意:如果我用if(item instanceof number) {} 包装total+=item,则该方法有效。只是为了完成,该方法目前看起来像这样:

function* iterable_flatten<T>(this: Iterable<T[]>): Generator<T> {
    for (let item of this) {
        for (let itemitem of item)
            yield itemitem;
    }
}

【问题讨论】:

  • 如何扩展IterableIterator?你能解释一下如何在原型上定义 iterable_flatten 方法吗?我找不到这样做的方法。
  • 也许您可以为此创建一个新问题。 cmets 真的不太适合用代码示例和进一步的 cmets 回答其他问题
  • 你说得对,我又创建了一个线程:stackoverflow.com/questions/66843182/…

标签: arrays typescript generics


【解决方案1】:

在阅读this article 之后,我发现解决方案是创建一个类型来推断数组的基本类型:

type BaseTypeOfArray<T> = T extends Array<infer I> ? I : "never";

然后用它来获取声明中的基类型:

flatten(this: Iterable<T>): Generator<BaseTypeOfArray<T>>;

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2022-07-12
    • 2018-02-22
    • 1970-01-01
    • 2020-08-20
    • 2021-10-17
    • 2011-06-25
    • 2020-07-17
    相关资源
    最近更新 更多