DefinitelyTyped:'export = _;' 是什么意思
DefinitelyTyped: What does 'export = _;' means
我正在尝试将 angular-material 与 ng-metadata 项目一起使用,但我 运行 遇到了一些问题。
我对 angular material 使用 DefinitelyTyped,第一行是:
declare module 'angular-material' {
var _: string;
export = _;
}
在我的 main.ts 我尝试 import { ngMaterial } from 'angular-material';
然后 bootstrap( AppComponent, [ 'ngMaterial' ] );
但我得到的只是:
Error:(3, 10) TS2305: Module ''angular-material'' has no exported member 'ngMaterial'.
我不知道我做错了什么
当通过 ES6 或 TypeScript 使用时,Angular 模块遵循的一个常见模式是它们将使用自己的名称作为默认导出。例如,我的应用程序中的模块之一如下所示:
const session = angular.module("smSession", [])
.service("session", SessionService)
.component("smLogin", Login)
.config(routes)
.run(loginRedirect);
export default session.name;
这背后的原因是它使声明 Angular 模块的依赖项的语法更清晰;例如:
import angular from "angular";
import ngAnimate from "angular-animate";
import ngMaterial from "angular-material";
import uiRouter from "angular-ui-router";
let module = angular.module("myApp", [ ngAnimate, ngMaterial, uiRouter ]);
如果他们改为导出整个模块,则您必须这样做:
let module = angular.module("myApp", [ ngAnimate.name, ngMaterial.name, uiRouter.name ]);
所以这就是为什么 angular-material
的主模块声明看起来像这样的原因 - 它们只是表示这样一个事实,即您可以从包中导入的只是一个表示模块名称的字符串。其余的类型定义是 - 您可以在应用程序的任何地方使用 angular.material
命名空间,而无需进行导入。
编辑:澄清一下,这里是 the file that gets imported when you import ngMaterial 的实际来源:
// Should already be required, here for clarity
require('angular');
// Load Angular and dependent libs
require('angular-animate');
require('angular-aria');
// Now load Angular Material
require('./angular-material');
// Export namespace
module.exports = 'ngMaterial';
请注意 require('./angular-material')
没有 return 任何东西 - 有效导入只是运行在幕后设置 Angular 模块的文件(实际上与在我的例子中)。唯一从模块中导出的是名称。
我正在尝试将 angular-material 与 ng-metadata 项目一起使用,但我 运行 遇到了一些问题。
我对 angular material 使用 DefinitelyTyped,第一行是:
declare module 'angular-material' {
var _: string;
export = _;
}
在我的 main.ts 我尝试 import { ngMaterial } from 'angular-material';
然后 bootstrap( AppComponent, [ 'ngMaterial' ] );
但我得到的只是:
Error:(3, 10) TS2305: Module ''angular-material'' has no exported member 'ngMaterial'.
我不知道我做错了什么
当通过 ES6 或 TypeScript 使用时,Angular 模块遵循的一个常见模式是它们将使用自己的名称作为默认导出。例如,我的应用程序中的模块之一如下所示:
const session = angular.module("smSession", [])
.service("session", SessionService)
.component("smLogin", Login)
.config(routes)
.run(loginRedirect);
export default session.name;
这背后的原因是它使声明 Angular 模块的依赖项的语法更清晰;例如:
import angular from "angular";
import ngAnimate from "angular-animate";
import ngMaterial from "angular-material";
import uiRouter from "angular-ui-router";
let module = angular.module("myApp", [ ngAnimate, ngMaterial, uiRouter ]);
如果他们改为导出整个模块,则您必须这样做:
let module = angular.module("myApp", [ ngAnimate.name, ngMaterial.name, uiRouter.name ]);
所以这就是为什么 angular-material
的主模块声明看起来像这样的原因 - 它们只是表示这样一个事实,即您可以从包中导入的只是一个表示模块名称的字符串。其余的类型定义是 angular.material
命名空间,而无需进行导入。
编辑:澄清一下,这里是 the file that gets imported when you import ngMaterial 的实际来源:
// Should already be required, here for clarity
require('angular');
// Load Angular and dependent libs
require('angular-animate');
require('angular-aria');
// Now load Angular Material
require('./angular-material');
// Export namespace
module.exports = 'ngMaterial';
请注意 require('./angular-material')
没有 return 任何东西 - 有效导入只是运行在幕后设置 Angular 模块的文件(实际上与在我的例子中)。唯一从模块中导出的是名称。