4

当使用 ES6 模块语法导出返回类 Typescript 实例的工厂函数时,会产生以下错误:

错误 TS4060:导出函数的返回类型具有或正在使用私有名称“路径”。

从paths.ts:

//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 编译中。

4

1 回答 1

7

如果您尝试自动生成声明文件,这只是一个错误,因为 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

于 2015-07-28T20:03:04.260 回答