2012-10-24 5 views
5

Non riesco a ottenere alcuna importazione per funzionare quando il modulo non è definito come una stringa. Cosa sta succedendo?Utilizzo di un backbone.d.ts

test.ts

import b = module('Backbone') 

non funziona: backbone.d.ts

declare module Backbone { 

    export class Events { 
    ... 

Opere: backbone.d.ts

declare module "Backbone" { 

    export class Events { 
    ... 

Modifica 1:

FYI Da 10.1.4

Un AmbientModuleIdentification con un letterale stringa dichiara un modulo esterno. Questo tipo di dichiarazione è consentita solo nel modulo globale. Lo StringLiteral deve specificare un nome di modulo esterno di livello superiore. i nomi di modulo esterni relativi non sono consentiti

Non capisco come sia utile non specificarlo come formato letterale stringa come trovato here e here. Funziona se si utilizza ///<reference... senza un modulo letterale stringa ma sto provando a generare moduli AMD che dipendono da queste librerie, quindi ho bisogno che l'importazione funzioni. Sono la minoranza e devo andare a modificare ogni .d.ts come versione letterale della stringa?

Edit 2:

Dichiarazione di un modulo usando una stringa letterale richiede che l'importazione sia una corrispondenza esatta, se quella stringa letterale. Non è più possibile utilizzare percorsi relativi o assoluti alla posizione di questa definizione modulo/modulo anche se non si trova nella stessa directory del file che tenta di importarlo. Ciò rende necessario un numero ///<reference e un'importazione, ma produce un modulo con tsc --module AMD che era esattamente alla ricerca (il percorso del modulo è come dettato dal letterale stringa di modulo "Backbone").

Ad esempio.

+- dep/ 
    |- backbone.d.ts 
|- test.ts 

backbone.d.ts:

declare module "Backbone" { 
    export class Events { 

Opere: test.ts:

///<reference path="../dep/backbone.d.ts" /> 
import b = module('Backbone') 

// generates 
// define(["require", "exports", 'Backbone'] 

non funziona: prova.ts:

import b = module('./dep/Backbone') 

Nota che questo funziona così ...

declare module "libs/Backbone" { 
... 
///<reference path="dep/backbone.d.ts" /> 
import b = module('libs/Backbone') 
... 
// generates 
define(["require", "exports", 'libs/Backbone'] 
+1

Sono davvero curioso di avere una buona spiegazione anche per quello. Ho archiviato un [problema] (http://typescript.codeplex.com/workitem/231) in codeplex alcune settimane fa su un argomento simile. Il problema è stato chiuso e il commento dice che ha qualcosa a che fare con la differenza tra i moduli interni ed esterni e che sperano di migliorare la loro documentazione al più presto ... – Valentin

+0

Potresti voler vedere i miei risultati 2 – ryan

+0

Interessante. Sono ancora curioso di sapere perché molte dichiarazioni non usano il formato stringa letterale. – Valentin

risposta

1

Quando si scrive questo:

declare module Backbone { 

Significa che avete già un modulo che è in l'ambito globale (in modo da poterlo utilizzare immediatamente, non è richiesta alcuna importazione). Ma quando si scrive questo:

declare module "Backbone" { 

Significa si specifica come il modulo importato (import ... = modulo ("...")) sarà.

+1

Ho aggiornato la mia domanda, se avete ulteriori pensieri per favore condividi – ryan