【问题标题】:Cannot overload functions with generic type extending another type不能重载具有扩展另一种类型的泛型类型的函数
【发布时间】:2015-08-31 23:33:27
【问题描述】:

我有以下代码:

public static testMethod<T extends MyModule.ITest>(fromArray: T): T;
public static testMethod<T extends MyModule.ITest>(fromArray: T[]): T[];
public static testMethod<T extends MyModule.ITest>(fromArray: (T|T[])): (T|T[])
{
    return null;
}

module MyModule
{
    export interface ITest
    {
    }
}

Typescript 在无正文函数的返回类型上抱怨“重复标识符 'testMethod'”和“函数 'testMethod' 声明了一个非 void 返回类型,但没有返回表达式”。如果我从泛型类型中删除“扩展 ITest”,一切似乎都正常。

【问题讨论】:

  • 问题在于IBase。您可以在您的问题中添加IBaseObservableArray。我猜IBase 定义deepCopyArray 的方式与ObservableArray 不兼容。
  • IBase 没有 deepCopyArray 的定义。 IBase 是 ObservableArray 中项目的类型,与 deepCopyArray 没有任何关系。我已经更改了我的问题以显示一个简化的示例,该示例不涉及这些无关紧要的更复杂的类型。

标签: typescript


【解决方案1】:

原来问题出在“MyModule.ITest”上。如果我使用“import ITest = MyModule.ITest;”然后说“extends ITest”而不是“extends MyModule.ITest”,它编译得很好。

import ITest = MyModule.ITest;
module MyModule2
{
    public static testMethod<T extends ITest>(fromArray: T): T;
    public static testMethod<T extends ITest>(fromArray: T[]): T[];
    public static testMethod<T extends ITest>(fromArray: (T|T[]): (T|T[])
    {
        return null;
    }
}

module MyModule
{
    export interface ITest
    {
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多