【问题标题】:Extending Array prototype with a generic function使用泛型函数扩展 Array 原型
【发布时间】:2020-03-23 09:35:27
【问题描述】:

我正在尝试向 Array 原型添加一个简单的通用函数,但 TypeScript 给我一个关于我没有得到的类型的错误。

interface Array<T> {
    pluck<T, TKey extends keyof T>(this: T[], key: TKey): T[TKey][];
}

Array.prototype.pluck = function pluck<T, TKey extends keyof T>(this: T[], key: TKey): T[TKey][] {
    return this.map(item => item[key]);
}

这是一个 Codesandbox:https://codesandbox.io/s/typescript-playground-export-3oww1?fontsize=14&hidenavigation=1&theme=dark

感谢您的帮助:)

【问题讨论】:

  • 只是省略你的函数实现的类型,你已经通过接口声明输入了它
  • 请把相关代码放在本题中,方便以后访问的人使用。
  • 不要那样做,只需创建您的新数组,它将扩展原始数组。一般来说,你不应该覆盖任何原型,当然也不应该覆盖核心。

标签: typescript typescript-generics


【解决方案1】:

当你在接口或类定义中引用一个泛型参数时,你不应该在方法中创建一个。现在 TypeScript 正确地指出来自Array&lt;T&gt;T 与来自pluck&lt;TT 不同。因此,如果您在接口定义中删除一个,一切都很好:

interface Array<T> {
    pluck<TKey extends keyof T>(this: T[], key: TKey): T[TKey][];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多