当我定义
时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);
答案 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)