需要有关TypeScript模块/命名空间导入的帮助
我正在Visual Studio 2015中使用TypeScript 2.1.5。该项目配置为使用“ES 2015”模块系统和ECMAScript 6 我正在尝试使用Angular Local存储模块,该模块由以下定义: 在我的一个服务中,我想导入该接口以便使用它,如下所示:需要有关TypeScript模块/命名空间导入的帮助,typescript,typescript2.0,definitelytyped,Typescript,Typescript2.0,Definitelytyped,我正在Visual Studio 2015中使用TypeScript 2.1.5。该项目配置为使用“ES 2015”模块系统和ECMAScript 6 我正在尝试使用Angular Local存储模块,该模块由以下定义: 在我的一个服务中,我想导入该接口以便使用它,如下所示: module Foooooo.Services { export class FooService { constructor(private localStorageService: local.
module Foooooo.Services {
export class FooService {
constructor(private localStorageService: local.storage.ILocalStorageService) {
}
}
}
在翻阅文档之后,我已经尝试了我能想到的一切:
import local from "angular"; // bzzzzzt
import * as ang from "angular"; // causes all of my other interfaces to no longer resolve
import { local } from "angular"; // doesn't compile
import { ILocalStorageService } from "angular"; // other interfaces don't resolve anymore
import { local.ILocalStorageService } from "angular"; // nopenope
import ILocalStorageService = require("angular"); // error: not compatible with ECMAScript 6 or higher
如何使其正确导入?您可以看到我的解决方案。运行npm-install
,然后运行npm-Run-build
,查看它是否正确编译
有两种方法可以解决这个问题。您可以使用模块(以前称为“外部模块”)或名称空间(以前称为“内部模块”)。对于每种方法,在回购协议中有2个*.ts
文件及其相应的名称
在module.ts
中,您可以显式导入两个依赖项:angular
和angular local storage
angular local storage
是一个应用程序,因为它修补angular
而不导出任何新内容。在导入“角度本地存储”
之后,导入的角度
(包含角度
导出的任何内容的变量)现在知道了角度本地存储所使用的额外属性/方法
在namespace.ts
中,与您在问题中展示的示例相比,只有一点细微的变化。因为angular
(用于script
标记),所以您可以使用该类型。这个全局类型已经被angular local storage
打了“补丁”,因为对于“项目”(任何带有tsconfig.json
的目录)中的“内部模块”/“名称空间”,TypeScript在编译时将包括所有d.ts
文件,当然还有其中一个d.ts
文件(即在@types/angular local storage
)内部,“增强”了angular
全局类型。事实上,如果删除@types/angular local storage
内部的节点\u模块
,则namespace.ts
的编译将失败
与名称空间方法相比,您应该更喜欢模块方法,因为许多包不提供UMD全局类型,导致后一种方法失败
import local from "angular"; // bzzzzzt
import * as ang from "angular"; // causes all of my other interfaces to no longer resolve
import { local } from "angular"; // doesn't compile
import { ILocalStorageService } from "angular"; // other interfaces don't resolve anymore
import { local.ILocalStorageService } from "angular"; // nopenope
import ILocalStorageService = require("angular"); // error: not compatible with ECMAScript 6 or higher