在名称空间内找不到名称

时间:2019-04-06 16:48:40

标签: node.js typescript namespaces es6-modules

我试图将打字稿中的接口和实现分开,所以我选择使用module功能。但是,即使使用Cannot find name,我也总是收到<reference path=.../>。这是我的代码:

IUserService.ts

namespace Service {
    export interface IUserService {
        login(username: string, password: string): void;
    }
}

UserService.ts

/// <reference path="./IUserService.ts" />

namespace Service {
    export class UserService implements IUserService {
        constructor() {}
}

然后tsc总是在UserService.ts中抱怨Cannot find name IUserService。我遵循文档中有关命名空间的说法,但是它对我不起作用。该如何解决?

1 个答案:

答案 0 :(得分:1)

两个建议from the TypeScript handbook

  • 请勿使用/// <reference ... />语法;
  • 请勿同时使用名称空间和模块。 Node.js已经提供了模块,因此您不需要名称空间。

这是一个解决方案:

// IUserService.d.ts
export interface IUserService {
    login(username: string, password: string): void;
}

// UserService.ts
import { IUserService } from "./IUserService";
export class UserService implements IUserService {
    constructor() {
    }
    login(username: string, password: string) {
    }
}

您必须定义a tsconfig.json file/// <reference ... />语句由配置文件(tsconfig.json)since TypeScript 1.5“轻巧,可移植的项目” 节)代替。

相关:How to use namespaces with import in TypeScriptModules vs. Namespaces: What is the correct way to organize a large typescript project?