相对导入无法解析为环境模块

时间:2017-08-20 18:38:08

标签: typescript

根据打字稿文件(https://www.typescriptlang.org/docs/handbook/module-resolution.html):

  

相对于导入文件解析相对导入   无法解析为环境模块声明。

但也是:

  

例如,来自" ./ moduleB"的导入语句,例如import {b};在   /root/src/moduleA.ts会导致尝试以下操作   定位" ./ moduleB"的位置:

/root/src/moduleB.ts
/root/src/moduleB.tsx
/root/src/moduleB.d.ts
/root/src/moduleB/package.json (if it specifies a "typings" property)
/root/src/moduleB/index.ts
/root/src/moduleB/index.tsx
/root/src/moduleB/index.d.ts"

/root/src/moduleB.d.ts 在我看来是一个环境模块声明,用于解析相对导入" ./ moduleB" - >确切地说文档否认了它。

我在这里遗漏了什么或文档错了吗?

1 个答案:

答案 0 :(得分:2)

简答

  

/ orotot/src/moduleB.d.ts这一行在我看来是一个环境模块声明......我在这里遗漏了什么或文档错了吗?

你在这里遗漏了一些东西。 moduleB.d.ts不是环境模块声明。以下是包含moduleB的环境模块声明的文件示例。

// someFile.d.ts 

declare module "moduleB" {
    export class b { }
}

declare关键字指定环境声明。

一些细节

关于环境,the documentation says

这个词
  

我们调用没有定义实现“ambient”的声明。通常,这些是在.d.ts文件中定义的。

环境声明包括但不限于环境模块声明。包含环境声明的.d.ts文件不是环境模块声明,也不一定包含环境模块声明。

例如,以下greeter.d.ts文件包含环境类声明,但它不是环境模块声明。

// greeter.d.ts

declare class Greeter {
    constructor(greeting: string);
    greeting: string;
}

以下foobar.d.ts文件包含两个环境模块声明" foo"和" bar",但文件本身不是环境模块声明。

// foobar.d.ts

declare module "foo" {       
    export function doFoo(foo: string): string;
}

declare module "bar" {
    export function doBar(bar: string): string;
}

您最初引用的文档指出"./foo"的相对导入无法解析为该模块的上述环境声明。

进一步详情

请参阅:https://www.typescriptlang.org/docs/handbook/modules.html

另请参阅:https://github.com/Microsoft/TypeScript-Handbook/issues/180

另请参阅:https://www.typescriptlang.org/docs/handbook/declaration-files/by-example.html