2016-05-07 35 views
9

Ho creato un file di definizione (d.ts) dal mio progetto dattiloscritto usando l'argomento --declaration dal compilatore tsc.File di definizione generati (.d.ts) per dattiloscritto che non funziona con types package.json

Ma questo file di definizione generato a quanto pare non funziona quando si tenta di pubblicare il pacchetto con la proprietà tipizzazioni al NPM package.json. Ho creato un altro progetto per testarlo.

Si lamenta con il messaggio: "Esportato pacchetto esterno di file tipizzazioni di file' ... d.tS' non è un modulo Si prega di contattare il pacchetto autore di aggiornare la definizione del pacchetto.".

Questo sono i miei file di origine:

MyInterface.ts

export interface MyInterface 
{ 
    MyProperty: string; 
} 

MyClass.ts

import {MyInterface} from './MyInterface'; 

export class MyClass implements MyInterface 
{ 
    get MyProperty(): string 
    { 
     return "MyString"; 
    } 
} 

MyInheritedClass.ts

import {MyClass} from './MyClass'; 

export class MyInheritedClass extends MyClass 
{ 
    public MyMethod(): number 
    { 
     return 1; 
    } 
} 

Il comando TSC è questo:

tsc MyClass.ts MyInterface.ts MyInheritedClass.ts --declaration -t es5 -outFile "mydefinition.js" --module "system" 

Questa è la definizione generato:

mydefinition.d.ts

declare module "MyInterface" { 
    export interface MyInterface { 
     MyProperty: string; 
    } 
} 
declare module "MyClass" { 
    import { MyInterface } from "MyInterface"; 
    export class MyClass implements MyInterface { 
     MyProperty: string; 
    } 
} 
declare module "MyInheritedClass" { 
    import { MyClass } from "MyClass"; 
    export class MyInheritedClass extends MyClass { 
     MyMethod(): number; 
    } 
} 

c'è un'altra cosa che devo da fare o la definizione generata presumibilmente non funziona nelle tipizzazioni package.json ??

Aggiornamento per maggiori dettagli:

Lo scenario è che ho 2 progetti:

  • Il primo progetto è dove ho generare la libreria dove ho pubblicherò al NPM, e il pacchetto .json è dove metto la proprietà typings che collega al file mydefinition.d.ts generato dal comando tsc -d.

  • Il secondo progetto creato per testare il primo aggiungendo il pacchetto (con le digitazioni) generato.

un legame con il 2 progetti e un altro link per lo scenario:

https://github.com/jvitor83/typings-packagejson

Credo che il problema è con la "I tuoi file di definizione dovrebbero essere scritti come moduli esterni" alla prima collegamento. Ma voglio sapere se c'è un modo per ottenere quelle definizioni generate per mettere la proprietà typings di package.json.

per riprodurre il problema:

+0

hai provato a usare 'typings.json'? –

+0

La mia esperienza con i dattilografi è con Angular2 dove nel tuo 'package.json' nella sezione' scripts' dichiari uno script per le tipizzazioni e dopo puoi usarlo per installare le definizioni di tipo che vuoi in questo modo: 'npm esegui tipizzazioni - - installa jasmine --ambient --save' –

+0

Dai un'occhiata a questi due collegamenti: 1) https://angular.io/docs/ts/latest/guide/npm-packages.html 2) https: // angular. io/docs/ts/latest/guide/typescript-configuration.html –

risposta

2

La soluzione era:

1 - aggiungere un singolo file 'index.ts' che esporta tutti i file altrui.

export * from "./MyInterface" 
export * from "./MyClass" 
export * from "./MyInheritedClass" 

2 - aggiungere al processo di costruzione di due di compilazione/transpilation dei file (uno per le dichiarazioni e un altro per le singole js file [con la proprietà in TSC compilatore])

let tsConfigDeclaration = gulp_typescript({module: 'system', target: 'es5', declaration: true, removeComments: true }); 
let tsConfigOneFile = gulp_typescript({module: 'system', target: 'es5', declaration: true, removeComments: true, out: 'typings-packagejson.js'}); 

Maggiori informazioni su costruire processo: file di https://github.com/jvitor83/typings-packagejson/blob/master/gulpfile.js

e l'indice: https://github.com/jvitor83/typings-packagejson/blob/master/app/src/typings-packagejson.ts

+0

Si prega di aggiornare la domanda, in modo che include la tua esigenza aggiornata. –

1

Quando si verifica questo errore?

Ho utilizzato il file d.ts generato in un altro progetto e funziona correttamente.

/// <reference path="mydefinition.d.ts" /> 

    import { MyInterface } from "MyInterface"; 
    import { MyClass } from "MyClass"; 
    import { MyInheritedClass } from "MyInheritedClass"; 

    let x: MyInterface = { MyProperty: "hello!!" }; 
    let y: MyClass = new MyClass(); 
    let z: MyInheritedClass = new MyInheritedClass(); 

E su compilarlo sta generando il file JS,

/// <reference path="mydefinition.d.ts" /> 
"use strict"; 
var MyClass_1 = require("MyClass"); 
var MyInheritedClass_1 = require("MyInheritedClass"); 
var x = { MyProperty: "hello!!" }; 
var y = new MyClass_1.MyClass(); 
var z = new MyInheritedClass_1.MyInheritedClass(); 

State ottenendo questo errore quando si utilizza questo in qualche file HTML? Hai incluso il file mydefinition.js nell'HTML?

Aggiornamento

in base alle tue maggiori dettagli, ecco la soluzione che può proporre, aggiungere un altro file di nome index.ts ed esportare tutti i moduli da lì,

index.ts

export * from "./MyInterface" 
    export * from "./MyClass" 
    export * from "./MyInheritedClass" 

Aggiungere un file tsconfig.json per una facile costruzione,

tsconfig.json

{ 
    "version": "1.0.0", 
    "compilerOptions": { 
     "target": "ES5", 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "sourceMap": false, 
     "declaration": true, 
     "outDir": "lib/" 
    }  
    } 

Nota ho fatto un modulo commonjs (non so se funziona per il vostro bisogno), generare costruire utilizzando il comando TSC. Genera file come sotto nota ha aggiunto file js per tutti i file ts e d.ts è anche per tutti i moduli, ma dato che abbiamo esportato tutti i moduli da un singolo file sarà più facile da usare nel file package.json per il modulo npm .

enter image description here

Quindi aggiungere package.json nel modulo NPM si desidera pubblicare come qui di seguito, consideriamo nome del modulo è foo

package.json

{ 
    "name": "foo", 
    "author": "author name", 
    "version": "1.0.0", 
    "main": "lib/index.js", 
    "typings": "lib/index.d.ts" 
    } 

Ora aggiungi la cartella foo all'interno di node_module, la struttura finale del secondo progetto sarà qualcosa di seguito,

enter image description here

Infine nel file test.ts importazione e l'uso,

test.ts

import { MyInterface, MyClass, MyInheritedClass } from "foo"; 

    let x: MyInterface = { MyProperty: "hello!!" }; 
    let y: MyClass = new MyClass(); 
    let z: MyInheritedClass = new MyInheritedClass(); 

Spero che questo aiuti.

+0

Il messaggio che ricevo nel VSCode. Ho aggiunto altri detais alla domanda. – jvitor83

+0

@ jvitor83: risposta aggiornata in base ai nuovi dettagli. –

+0

Vedo la tua soluzione e ho capito che il file di dichiarazione generato quando è compilato su un singolo file di output non è compatibile con le tipizzazioni in package.json. La mia alternativa era al momento della compilazione, creare una compilazione per le dichiarazioni e un'altra con un singolo file .js con quel file che esporta tutti gli altri come hai detto tu. @ madhu-ranjan In questo modo posso soddisfare "I tuoi file di definizione dovrebbero essere scritti come moduli esterni". https://github.com/jvitor83/typings-packagejson/commits/master I miei ultimi 2 commit lo dimostrano. Farò qualche altro test per vedere se questo può essere fatto senza la necessità di quel file – jvitor83

Problemi correlati