2017-02-20 2 views
3

My TypeScript v2.2.TypeScript: anonymouse class factory

У меня есть этот класс фабрика:

export class A { name: string; } 

export function makeConstructor(name: string) 
{ 
    const newClass = class extends A { }; 

    newClass.prototype.name = name; 

    return newClass; 
} 

машинописи ошибка броска:

Return type of exported function has or is using private name '(Anonymous class)'.

Я могу сказать, что этот завод возвращает any скрыть ошибку, но как я могу объяснить, что именно возвращаюсь?

Я попытался написать

  • makeConstructor<T extends A>(name: string): T
  • makeConstructor<T extends typeof A>(name: string): T
  • makeConstructor<T extends A['prototype']>(name: string): T['prototype']
+1

Этот код [работает] (http://www.typescriptlang.org/play/#src=export%20class%20A%20 % 7B% 20name% 3A% 20string% 3B% 20% 7D% 0D% 0A% 0D% 0Aexport% 20function% 20makeConstructor (имя% 3A% 20string)% 0D% 0A% 7B% 0D% 0A% 20% 20const% 20newClass% 20% 3D% 20class% 20extends% 20A% 20% 7B% 20% 7D% 3B% 0D% 0A% 0D% 0A% 20% 20% 20newClass.prototype.name% 3D% 20name% 3B% 0D% 0A% 0D% 0A% 20% 20return% 20newClass% 3B% 0D% 0A% 7D) on TypeScript 2.1 ... – Paleo

ответ

0

При использовании шаблона проектирования Factory, вы, вероятно, хотите, чтобы защитить точный класс реализации, выбранного Factory и просто верните A (или его интерфейс). Поэтому я думаю, что возвращение А просто делает трюк, нет необходимости в генериках и т. Д.

+0

Я использую эту фабрику анонимного класса для создания разных ** расширенных ** классов из базового класса A. Я хочу знать, какой из классов был разработан. – ktretyak

Смежные вопросы