需要有关TypeScript模块/命名空间导入的帮助

需要有关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.

我正在Visual Studio 2015中使用TypeScript 2.1.5。该项目配置为使用“ES 2015”模块系统和ECMAScript 6

我正在尝试使用Angular 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