没有任何声明模块的类型文件是否有意义?
Does a typings file without any declared modules make sense?
我正在尝试弄清楚如何在我的 Angular 项目中使用打字文件。但是所有指南或 SO 帖子似乎只告诉您将声明的模块导入到类型文件中。在我的例子中 (gridstack.js) 它没有声明的模块,只有接口和一个声明的命名空间。
我已经在类型下的 tsconfig.file 中声明了 gridstack。我可以,例如声明一个 IGridstackOptions
类型的变量,没有编译器错误,但我收到一个运行时错误告诉我
C:/myPath/src/app/other-route/other-route.component.ts (16,60): Cannot find name 'IGridstackOptions'.
有人知道我做错了什么吗?拥有一个没有声明模块的类型文件有意义吗?如果是,你能解释一下这背后的原因吗?
谢谢 :)
您可以通过两种方式使用 JavaScript 中的库:
- 使用库全局对象
- 正在导入库对象
直到最近,大多数图书馆主要使用第一种方法并添加全局对象。例如,jQuery 全局对象。现在大多数库将它们的库打包为 UMD 模块,允许将库作为全局对象使用,或者如果代码在模块支持环境中 运行 则作为导入使用。
Typescript 定义了两种可用于定义声明的方式:
declare namespace NodeJS
declare module "buffer"
第一个定义了一个对象(命名空间,通常是全局的),而第二个定义了一个模块。参见 。
gridstack
库的类型文件定义了一个全局对象:
declare namespace GridStackUI
这也是代码中所做的:
(function($, _) {
var scope = window;
...
return scope.GridStackUI;
});
它可以像这样在您的代码中使用:
declare const gridstack: GridStack;
然而,在gridstack.js
里面还有UMD模块定义,所以它可以像这样在模块支持环境中使用:
import * as gridstack from 'gridstack';
但是打字文件没有该用法的声明。
我正在尝试弄清楚如何在我的 Angular 项目中使用打字文件。但是所有指南或 SO 帖子似乎只告诉您将声明的模块导入到类型文件中。在我的例子中 (gridstack.js) 它没有声明的模块,只有接口和一个声明的命名空间。
我已经在类型下的 tsconfig.file 中声明了 gridstack。我可以,例如声明一个 IGridstackOptions
类型的变量,没有编译器错误,但我收到一个运行时错误告诉我
C:/myPath/src/app/other-route/other-route.component.ts (16,60): Cannot find name 'IGridstackOptions'.
有人知道我做错了什么吗?拥有一个没有声明模块的类型文件有意义吗?如果是,你能解释一下这背后的原因吗?
谢谢 :)
您可以通过两种方式使用 JavaScript 中的库:
- 使用库全局对象
- 正在导入库对象
直到最近,大多数图书馆主要使用第一种方法并添加全局对象。例如,jQuery 全局对象。现在大多数库将它们的库打包为 UMD 模块,允许将库作为全局对象使用,或者如果代码在模块支持环境中 运行 则作为导入使用。
Typescript 定义了两种可用于定义声明的方式:
declare namespace NodeJS
declare module "buffer"
第一个定义了一个对象(命名空间,通常是全局的),而第二个定义了一个模块。参见
gridstack
库的类型文件定义了一个全局对象:
declare namespace GridStackUI
这也是代码中所做的:
(function($, _) {
var scope = window;
...
return scope.GridStackUI;
});
它可以像这样在您的代码中使用:
declare const gridstack: GridStack;
然而,在gridstack.js
里面还有UMD模块定义,所以它可以像这样在模块支持环境中使用:
import * as gridstack from 'gridstack';
但是打字文件没有该用法的声明。