TypeScript не находит определения

У меня есть следующая структура файла:

+ src
|  test.ts
|  z_module.d.ts
tsconfig.json

test.ts

// does nothing?
/// <reference path="./z_module.d.ts" />
// can't now write:
var a: zzrm.zzrmObject;

// have to use:    
import * as zzrm from 'zzrm';
var a: zzrm.zzrmObject;

z_module.d.ts

declare module "zzrm" {
  export interface zzrmObject {id: string}
}

Я пытался уменьшить проблему, но, возможно, неправильно уменьшил ее. Проблема изначально возникла из-за попытки использовать sequelize-auto-ts. При загрузке репозитория, обновлении sequelize.d.ts и открытии в коде Visual Studio (версия 0.10.6) эта строка сразу выделяется с ошибкой "Не удается найти пространство имен" sequelize "".

var Sequelize:sequelize.SequelizeStatic = require('sequelize');
              ^^^^^^^^^

Несмотря на то, что sequelize.d.ts успешно находится в начале файла с: /// <reference path="../../typings/sequelize/sequelize.d.ts" />

1 ответ

Приведенный выше "сокращенный" пример работает, если модуль zzrm объявлен без кавычек:

declare module zzrm {
  export interface zzrmObject {id: string}
}

Когда я обновил sequelize.d.ts, я не заметил, что объявление модуля изменилось с

declare module sequelize { ... }

в

declare module "sequelize" { ... }

Об этом говорится в документации по TypeScript в разделе "Внешние внешние модули", но я еще не совсем понял, как все эти части сочетаются друг с другом и почему они требуют, чтобы вы также добавили import * as zzrm from 'z_module';

Другие вопросы по тегам