我遇到从扩展文件导入声明的问题(我正在使用this输入)。根据{{3}},我应该把它放到我的代码中:
import * as SockJS from 'sockjs-client';
import BaseEvent = __SockJSClient.BaseEvent;
import SockJSClass = __SockJSClient.SockJSClass;
但是,当我尝试按照以下方式执行此操作时:
module Test {
import * as SockJS from 'sockjs-client';
import BaseEvent = __SockJSClient.BaseEvent;
import SockJSClass = __SockJSClient.SockJSClass;
export class Example {
constructor() {......
}}}
我从编译器中收到以下错误:
error TS1147: Import declarations in a namespace cannot reference a module.
我做错了吗?或者打字本身有什么问题吗?
感谢
uksz
答案 0 :(得分:11)
您应该在模块外使用导入语句
import * as SockJS from 'sockjs-client';
import BaseEvent = __SockJSClient.BaseEvent;
import SockJSClass = __SockJSClient.SockJSClass;
module Test {
export class Example {
constructor(){}
}
}
答案 1 :(得分:2)
我认为这是由于打字稿模块选项的混合。
您的类使用内部模块,输入文件使用外部模块。 请参阅此处的“使用其他JavaScript库”部分:http://www.typescriptlang.org/docs/handbook/modules.html
答案 2 :(得分:0)
当尝试在我的一个打字稿文件之一中导入moment.d.ts
类型定义文件时,我遇到了同样的问题。
我还将整个班级都包装在module
中。我要解决的问题的解决方案是,在我的打字稿文件-Scheduler.ts
中,将import * as moment from "../definitions/moment/moment";
行放在module
声明的前面(请参见下图)。
为简洁起见,我没有包括整个班级的定义。
如您所见,我在打字稿文件中为外部库(reference path
,jquery
和kendo ui
)明确定义了moment
。
保存类型定义的文件夹结构。
下面也是我的tsconfig.json
,不太确定设置此allowSyntheticDefaultImports: true
可以缓解此问题。导入和在打字稿文件中使用时,我只是遵循在此link上写的注释。
{
"compileOnSave": true,
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5",
"module": "commonjs",
"strictNullChecks": false,
"allowSyntheticDefaultImports": true
}
}
答案 3 :(得分:0)
我成功地在自定义 Cypress 代码中使用导入的类型,使用与它们相同的语法:
declare global {
namespace Cypress {
所以它至少可以在命名空间中工作,没有在 ts 模块中进行测试,但我希望它也可以。
它似乎只适用于这种特定的上下文,因为如果我注释掉我的 import
,它会抛出:Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.ts(2669)
。但如果你在那里,那就是你想要导入/导出一些东西。