打字稿错误:&#34;导出函数的返回类型具有或正在使用来自外部模块<m>的名称<n>但不能命名为&#34;

时间:2018-01-30 11:30:43

标签: typescript typescript-typings

使用Typescript 2.6.2,我开发了一个返回Observable的函数。此功能是在我作为名为 my-package 的包发布的模块中开发的。

该功能在文件 my-function.ts 中定义为

import { Observable } from 'rxjs/Observable';

export function myFunction() {
    return Observable.from([1,2,3]));
}

该模块的 index.ts 就是这样

import {myFunction} from './my-function';

export {myFunction};

现在我想在另一个项目中使用 my-function 。因此,我导入了 my-package ,然后编写了一个新函数 newFunction ,它在一个看起来像 my-function >

import {myFunction} from 'my-function';

export function newFunction() {
    return myFunction();
}

如果我这样做,当我尝试编译最后一个文件时,我收到一个错误,其文本为

导出函数的返回类型已经或正在使用名称&#39; Observable&#39;来自外部模块&#34;〜/ node_modules / rxjs / Observable&#34;但无法命名。

为了解决这个问题,我必须更改 newFunction 的代码

 import { Observable } from 'rxjs/Observable';
 import {myFunction} from 'my-function';

 export function newFunction(): Observable<any> {
     return myFunction();
 }

有没有办法避免编译器问题而不必明确声明 newFunction 的返回类型?

1 个答案:

答案 0 :(得分:3)

该错误消息明确提及&#34;名称Observable&#34;,这不在定义newFunction的模块范围内,这会阻止编译器生成类型声明文件那个模块。

要修复它,您只需要导入该名称 - Observable - 仅此而已。只需将此行添加到newFunction模块:

import { Observable } from 'rxjs/Observable';

这足以让编译器在生成的newFunction文件中拼出.d.ts的推断返回类型,您不必明确声明该返回类型。