2015-08-31 3 views
0

У меня есть следующий код:не перегружать функции с родовым типом расширения другого типа

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 
    { 
    } 
} 

Машинописи жалуется на «Дублировать идентификатор„TestMethod“» и «Функция„TestMethod“объявлен непустым тип возвращаемого, но не имеет выражения возврата "на возвращаемые типы функций без тела. Если я удаляю «extends ITest» из родового типа, все работает.

+0

Вопрос с 'IBase'. Можете ли вы добавить 'IBase' и' ObservableArray' к вашему вопросу. Я предполагаю, что 'IBase' определяет' deepCopyArray' таким образом, который несовместим с 'ObservableArray'. – thoughtrepo

+0

IBase не имеет определения deepCopyArray. IBase - это тип элементов ObservableArray и не имеет никакого отношения к deepCopyArray. Я изменил свой вопрос, чтобы показать упрощенный пример, который не включает эти более сложные типы, которые не имеют отношения к делу. – Michelle

ответ

0

Оказалось, что проблема связана с "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 
    { 
    } 
} 
Смежные вопросы