Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在名称空间中看不到接口_Typescript_Kendo Ui - Fatal编程技术网

Typescript 在名称空间中看不到接口

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

这个问题与剑道UI没有直接关系,但更多的是关于TypeScript命名空间声明

我正在尝试从剑道UI库导入一些接口。剑道UI索引d.ts的结构如下所示:

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();
    }
}