具有一些显式接口的环境模块

时间:2018-03-21 22:57:43

标签: typescript typescript-typings

当我定义

declare module "my-module";

我说"你可以从这个模块导入任何东西"例如:

import {funcFuncFunc} from 'my-module';

funcFuncFunc(10); // No error here

但是!我不能将从此模块导入的任何内容用作类型。

import {BlahBlahBlah} from "my-module";

let a: BlahBlahBlah; // Error like "Cannot use namespace 'BlahBlahBlah' as a type.

如果我特意定义这个界面:

declare module "my-module" {
  type BlahBlahBlah = any;
}

然后最后一个例子可以正常工作但首先会中断。

问题:有没有办法制定一个定义,以便我可以充分利用这两个世界?我想只为我想要用作类型的东西定义显式接口,而其他所有东西都隐含任意。

所以,这将有效:

declare module "my-module" {
  type BlahBlahBlah = any;
  // + Some any Magic
}

import {BlahBlahBlah, funcFuncFunc} from 'my-module';

let a: BlahBlahBlah;
funcFuncFunc(10);

1 个答案:

答案 0 :(得分:0)

declare module "my-module";是一种快捷方式,可以在找不到现有的声明文件(.d.ts)时,没有时间写一个也没有时间将模块转换为打字稿。

如果你想写一个正确的声明文件,官方文档在这里:https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html

您可以看到一个可以复制https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/random-js/index.d.ts

的实例

请注意,如果模块很简单,编写声明文件可能比将模块转换为typescript要长。 (YMMV)