Заводская структура узлов / модулей блоков машинописи: ошибка TS4060
При использовании синтаксиса модуля ES6 для экспорта фабричной функции, которая возвращает экземпляр класса Typescript, выдается следующая ошибка:
ошибка TS4060: возвращаемый тип экспортируемой функции имеет или использует закрытое имя "Пути".
Из путей.
//Class scoped behind the export
class Paths {
rootDir: string;
constructor(rootDir: string) {
this.rootDir = rootDir;
};
};
//Factory function: returns instances of Paths
export default function getPaths(rootDir:string){
return new Paths(rootDir);
};
Это законный ES6 javascript. Тем не менее, единственное, что я нашел, - это экспорт класса. Это означает, что когда он компилируется в ES6, класс экспортируется, что побеждает цель его определения в модуле. например:
//Class now exported
export class Paths {
rootDir: string;
constructor(rootDir: string) {
this.rootDir = rootDir;
};
};
//Factory function: returns instances of Paths
export default function getPaths(rootDir:string){
return new Paths(rootDir);
};
Я что-то пропустил? Мне кажется, что этот шаблон должен поддерживаться машинописным шрифтом, особенно в компиляции ES6, где шаблон становится более заметным.
1 ответ
Это ошибка только в том случае, если вы пытаетесь автоматически создать файл объявления, потому что нет ничего, что TypeScript мог бы выдать в этот файл, который бы воспроизводил форму вашего модуля со 100% точностью.
Если вы хотите, чтобы компилятор создал файл объявления, вам нужно будет указать тип, который вы можете использовать для типа возвращаемого значения: getPaths
, Вы можете использовать встроенный тип:
export default function getPaths(rootDir:string): { rootDir: string; } {
return new Paths(rootDir);
};
Или определите интерфейс:
class Paths implements PathShape {
rootDir: string;
constructor(rootDir: string) {
this.rootDir = rootDir;
}
}
export interface PathShape {
rootDir:string;
}
export default function getPaths(rootDir:string): PathShape {
return new Paths(rootDir);
}
Второе, вероятно, предпочтительнее, потому что это дает людям, которые import
ваш модуль какое-то имя, чтобы использовать для ссылки на тип возвращаемого значения getPaths
,