Не удается найти имя в пространстве имен - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь разделить интерфейсы и реализации внутри машинописного текста, поэтому я решил использовать функцию 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 всегда жалуется, что Cannot find name IUserService внутри UserService.ts. Я следую тому, что говорится в документации о пространстве имен, но это не работает для меня. Что должно быть исправлением для этого?

1 Ответ

1 голос
/ 07 апреля 2019

Два совета из справочника TypeScript :

  • Не используйте синтаксис /// <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) начиная с TypeScript 1.5 (раздел "Легкие переносимые проекты" ).

Связанные: Как использовать пространства имен с импортом в TypeScript и Модули и пространства имен: Как правильно организовать большой проект машинописного текста? .

...