Я новичок в Typescript (1.8). Я преобразовываю проект, написанный для angular 1.4, в машинописный текст.
Одной из вещей, которые я сделал, было создание D3Service, который асинхронно загружает библиотеку d3.js и делает ее доступной в промисе.
Это мой преобразованный код в машинописный текст:
namespace D3Provider{
export class D3Service{
static $inject = ['$document', '$window', '$q', '$rootScope','$timeout'];
public d3: ng.IPromise<{}>;
constructor(
private $document: ng.IDocumentService,
private $window: ng.IWindowService,
private $q: ng.IQService,
private $rootScope: ng.IScope,
private $timeout: ng.ITimeoutService){
var d = $q.defer();
this.d3=d.promise;
function onScriptLoad() {
// Load client in the browser
$timeout(function(){
$rootScope.$apply(function () {
d.resolve($window['d3']);
});
});
}
var scriptTag = $window.document.createElement('script');
scriptTag.type = 'text/javascript';
scriptTag.async = true;
scriptTag.charset="utf-8"
scriptTag.src = 'bower_components/d3/d3.min.js';
scriptTag.onload = onScriptLoad;
var s = $document[0].getElementsByTagName('body')[0];
s.appendChild(scriptTag);
}
}
angular.module('d3', [])
.service('d3Service', D3Service);
}
Общедоступное свойство d3 содержит обещание, содержащее значения из window.d3.
Я скачал файл, который доступен в ../../типы/модули/d3/index.d.ts
В коде я пробовал такие вещи, как:
/// <reference path="../../typings/modules/d3/index.d.ts" />
import * as d3lib from 'd3';
...
public d3: ng.IPromise<d3lib>;
Затем компилятор жалуется: ошибка TS2304: не удается найти имя «d3lib».
ng.IPromise<d3>
без импорта? - person Paarth   schedule 11.10.2016import *
, но оставили строку/// <reference path
? Это было мое предложение - person Paarth   schedule 11.10.2016