2012-10-22 7 views
16

Mam moduł, który zależy od Backbone. Mam backbone.d.ts definicji, ale maszynopis nie wydają się chce skompilować mój moduł chyba mojaImportuj moduł TypeScript używając tylko definicji otoczenia do użycia w amd

import Backbone = module("backbone") 

faktycznie wskazuje na ważną modułu szkieletowej w przeciwieństwie do pliku definicji. Używam modułów ładowanych przez AMD i zdefiniowałem shred dla requirejs dla szkieletu.

Czy istnieje inne rozwiązanie oprócz tworzenia definicji modułu php?

Aktualizacja: Efektem ubocznym rozwiązania jest to, że kod taki jak ten nie działa, ponieważ moduł już nie istnieje. Musi istnieć z powodu wymaganego shim. Jedynym sposobem obejścia tego problemu jest posiadanie dwóch plików .d.ts. Jeden dla pliku używającego szkieletu jako importu, który nie zawiera bitu declare module. Druga do korzystania z /// <reference, która obejmuje linię declare module.

/// <reference path="../dep/backbone/backbone.d.ts" /> 

interface IApi { 
    version: number; 
    Events: Backbone.Events; 
} 

Odpowiedz

9

Język TypeScript zmienił się trochę od czasu oryginalnej odpowiedzi.

Na przykład, aby zaimportować zewnętrznego modułu używanego require (mój oryginalny odpowiedź miał starą module słowa kluczowego):

o to częsty przypadek zastosowania do importowania kręgosłup - Korzystanie z informacji o typie z pewnością Wpisane:

/// <reference path="scripts/typings/backbone/backbone.d.ts" /> 

import bb = require('backbone'); 

w definicji typu, moduł kręgosłup jest uznany za ciebie, co jest tym, co pozwala na import ważność:

//... lots of code and then... 

declare module "backbone" { 
    export = Backbone; 
} 

Więc oryginalne pytanie może być rozwiązany za pomocą ...

/// <reference path="scripts/typings/backbone/backbone.d.ts" /> 

import bb = require('backbone'); 

interface IApi { 
    version: number; 
    Events: bb.Events; 
} 

class Api implements IApi { 
    public version = 1; 
    public Events: bb.Events = null; 
} 

W tym przykładzie kodu, to wszystko, co jest wymagane - ale coraz częściej będziemy chcieli bibliotekę szkieletową ładowane przy starcie ... można użyć Komentarz (oficjalnie eksperymentalny) do wywoływania wywoływanego wywołania funkcji define w celu włączenia szkieletu.

/// <reference path="scripts/typings/backbone/backbone.d.ts" /> 
/// <amd-dependency path="backbone" /> 

import bb = require('backbone'); 

interface IApi { 
    version: number; 
    Events: bb.Events; 
} 

class Api implements IApi { 
    public version = 1; 
    public Events: bb.Events = null; 
} 
+1

Ja tylko próbuje to prawda w Visual Studio i jestem odtwarzam twój problem. Pozwól mi sprawdzić, czy mogę to naprawić! – Fenton

+1

W moim teście stwierdziłem, że Deklaracja otoczenia musi pomijać blok 'module', tak jak normalny moduł w AMD lub CommonJS. – Fenton

+0

Doskonale, dzięki! – ryan

7

Jest rzeczywiście inny sposób obsłużyć w :

  1. sklonować repozytorium GitHub DefinitelyTyped. Zawiera ona jquery.d.ts, backbone.d.ts i wiele innych plików definicji.

  2. link pliki definicję do pliku myfile.ts:
    /// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
    /// <reference path="DefinitelyTyped/jquery/jquery.d.ts" />

  3. Dodaj AMD zależność do biblioteki javascript:
    /// <amd-dependency path="jquery"/>

  4. Aby korzystać $ wewnątrz pliku myfile.ts ty może teraz zadzwonić wymaga:
    var $ = require("jquery");

Pełna wersja myfile.ts:

/// <reference path="DefinitelyTyped/requirejs/require.d.ts" /> 
/// <reference path="DefinitelyTyped/jquery/jquery.d.ts" /> 
/// <amd-dependency path="jquery"/> 
var $ = require("jquery"); 

export function helloWorld() { 
    $("<div>Hello World</div").appendTo(document.body); 
} 

Jeśli prowadzisz tsc --module amd myfile.ts dostaniesz następujące javascript kod:

define(["require", "exports", "jquery"], function(require, exports) { 
    var $ = require("jquery"); 

    function helloWorld() { 
     $("<div>Hello World</div").appendTo(document.body); 
    } 
    exports.helloWorld = helloWorld; 
}); 
+0

Interesujące, nie widziałem '' before – ryan

+0

wyciągnął mnie z moich błędów, dziękuję! –

Powiązane problemy