我试图简单地使用来自其他commonjs模块的类型(接口) . 我想知道是否有办法这样做,而不必每次只需要类型导入模块(没有实现)?
也是为了同一点 . 如何在没有使用"--module commonjs"进行编译的情况下在项目中使用commonjs声明的模块类型? (只是为了使用这些类型,我知道你可以做 var x = require('x')
,如果你不关心类型安全,但这违背了TypeScript的目的)
这似乎是一个有效的用例,因为人们可能希望创建一个没有实际实现的库...但是正如我目前所看到的那样,你必须 import x = require('x')
实际实现,即使我不需要它已经有定义文件 .
有没有办法告诉编译器它“只是存在”,类似于声明如何使用变量?
例:
假设我有file.ts,我没有编译任何模块设置(无):
/// <reference path="ExternalCommonJSModule.d.ts" />
export class A {
public foo(bar: ITypeFromExternalCommonJSModule): number {
return bar.x * 2;
}
}
假设ExternalCommonJSModule.d.ts看起来像这样:
declare module "ExternalCommonJSModule" {
export interface ITypeFromExternalCommonJSModule {
x: number;
}
}
(注意,这 doesn't 编译,因为file.ts isn 't compiled with --module commonjs and it doesn' t导入.d.ts的实现)
1 回答
您可以将接口放在全局模块中,例如
globals.d.ts
然后您就可以在整个项目中使用它们而无需导入 .注意:只要您全局化,您就会严格限制代码的可共享性并使自己处于钻石版本依赖性问题 .