Импорт angular-ui-router и RequireJS domReady в качестве модуля TypeScript

Я использую AMD (в частности, RequireJS) вместе с TypeScript в моем образце для поддержки внешних модулей. Вот main.ts, который RequireJS загружает (через атрибут data-main):

/// <reference path="../typings/tsd.d.ts" />
requirejs.config({
  paths: {
    jquery: '../bower_components/jquery/dist/jquery',
    angular: '../bower_components/angular/angular',
    uiRouter: '../bower_components/angular-ui-router/release/angular-ui-router',
    domReady: '../bower_components/requirejs-domready/domReady"
  },
  shim: {
    angular: {
        deps: ['jquery'],
        exports: 'angular'
    },
    uiRouter: {
        deps: ['angular']
    }
  },
  deps: ['bootstrapper']
});

и вот файл bootstrapper.ts (не в рабочем состоянии), который загружает приложение:

import angular = require('angular') // works fine
import uiRouter = require('uiRouter') // VS Code throws error. External module not found.
import domReady = require('domReady') // Same error as above.

angular.bootstrap(domReady, ['myApp'], {strictDi: true}); // Not working due to domReady.

Мне приходится прибегать к использованию обычного метода RequireJS define, чтобы получить зависимости маршрутизатора и domReady:

define(['angular',
  'domReady',
  'uiRouter'
], (angular, document, uiRouter) => {
  angular.bootstrap(document, ['myApp'], {strictDi: true});
});

Любые идеи, как я могу сделать domReady и uiRouter внешними модулями TypeScript.


person Anup Vasudeva    schedule 21.06.2015    source источник


Ответы (1)


Любые идеи, как я могу сделать domReady и uiRouter внешними модулями TypeScript.

Исправление

Создайте файл vendor.d.ts, содержащий следующее:

declare module "uiRouter" {
   var dummy:any;
   export = exp;
}
declare module "domReady" {
   var dummy:any;
   export = exp;
}

В качестве альтернативы вы можете создать для них правильные объявления окружения или найти их на сайте DefinitelyTyped.

person basarat    schedule 05.07.2015
comment
Спасибо @басарат. Я не уверен, что нужно экспортировать из модуля uiRouter. angular-ui-router находится в отдельном угловом модуле ui.router. Таким образом, 1_ - person Anup Vasudeva; 07.07.2015
comment
Будет ли хорошей идеей использовать ///‹amd-dependency=../path/to/ui-router /› - person Anup Vasudeva; 07.07.2015
comment
Да, но только если вы не планируете использовать экспортированное значение - person basarat; 08.07.2015