2017-07-14 123 views
0

导入型环境声明,我有我的打字稿项目的声明文件,像这样:在打字稿

// myapp.d.ts 
declare namespace MyApp { 
    interface MyThing { 
    prop1: string 
    prop2: number 
    } 
} 

这个伟大的工程,我可以在我的项目的任何地方使用此命名空间,而无需将其导入。

我现在需要从一个第三方模块导入一个类型,在我的环境声明中使用它:

// myapp.d.ts 
import {SomeType} from 'module' 

declare namespace MyApp { 
    interface MyThing { 
    prop1: string 
    prop2: number 
    prop3: SomeType 
    } 
} 

编译器现在抱怨说,它无法找到命名空间“MyApp的”,大概是因为进口防止它成为环境。

在利用第三方类型时,是否有一些简单的方法可以保留声明的环境?

回答

1

不幸的是,没有。正如您已经发现这只适用于内部代码,例如无需外部依赖。您应该导出您的名称空间,或者导出类并使用ES6模块。但两者都会导致你需要import你的东西。正如我相信的那样,你正试图避免的事情。

就我个人而言,我觉得在整个代码中实际使用导入(甚至是内部)更加令人欣慰。这很简单,因为打开特定文件(类)时,其所有依赖关系都立即可见。

在问题"How to use namespaces with import in TypeScript"中已经解决了一个彻底的例子。

其他人的注意事项:“内部可用的命名空间”也是我不考虑这个重复问题的原因。