Typescript 在名称空间中看不到接口
这个问题与剑道UI没有直接关系,但更多的是关于TypeScript命名空间声明 我正在尝试从剑道UI库导入一些接口。剑道UI索引d.ts的结构如下所示:Typescript 在名称空间中看不到接口,typescript,kendo-ui,Typescript,Kendo Ui,这个问题与剑道UI没有直接关系,但更多的是关于TypeScript命名空间声明 我正在尝试从剑道UI库导入一些接口。剑道UI索引d.ts的结构如下所示: declare namespace kendo.ui { class Draggable extends kendo.ui.Widget { ... } interface DraggableEvent { ... } // ... other declarations } 现在,我将此声明导入我的TypeScript
declare namespace kendo.ui {
class Draggable extends kendo.ui.Widget { ... }
interface DraggableEvent { ... }
// ... other declarations
}
现在,我将此声明导入我的TypeScript文件,如下所示:
import '@progress/kendo-ui';
奇怪的是,在我的TypeScript文件中,我只能看到类和函数声明,而从名称空间之外看不到任何接口
我的tsconfig.json是这样配置的:
{
"compilerOptions": {
"lib": [
"dom",
"es5",
"es2015",
"es2015.promise"
],
"module": "es2015",
"moduleResolution": "node",
"strict": false,
"target": "es2015",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true
}
}
我尝试在一些接口声明之前添加export关键字,但没有成功
有人能解释一下这里发生了什么吗?Typescript中的名称空间只是一个对象包装器。它将您的类和接口放置在具有您声明的名称的对象中。 这是名为kendo.ui的Typescript命名空间的示例。 顺便说一下,您不必导入.d.ts文件
啊啊,从老年开始就一直存在。名称空间是ES6时代之前使用的旧模块语法,在TS中也称为外部模块。您通常不会在TS中导入/导出名称空间,因为它们对JavaScript没有任何意义。所以你从这些文件中得到的只是类型@那么我如何使用这些接口呢?通过添加到文件的顶部?嗯,新旧之间的线条有点模糊。在较新的编译器中,不必///ref,只需导入外部模块即可。如果您在项目模式下运行,例如,您有一个tsconfig.json,与您一样,那么它应该会拾取该模块中的所有.d.ts文件。这个问题的回答有点像一般。我认为剑道队使用的是全球战术。因此,当您导入kendo.js文件时,如果您使用该版本,它会修补窗口对象和/或jQuery对象。此版本中的.d.ts文件仅表示全局定义的对象。例如,您不需要导入它,它没有外部模块。这是老派的做事方式。但是,这同样取决于您使用的整个index.d.ts文件以及您使用的KendoUI版本。
declare namespace kendo.ui {
class Draggable {}
interface DraggableEvent {}
}
class Test{
constructor() {
let d = new kendo.ui.Draggable();
}
}