Typescript-deklaration från delat bibliotek som använder requirejs
Jag försöker skriva ett TypeScript-bibliotek som delas mellan några andra TypeScript-applikationer. För att göra detta lade jag varje bibliotek som sin egen node-modul och har biblioteket inställt på att generera dess deklarationsfil.
För att testa har jag den delade biblioteket uppsatt med en fil:
lib\guid.ts
export class Guid {
static EmptyGuid(): string {
return '00000000-0000-0000-0000-000000000000';
}
}
lib\tsconfig.json
{
"compilerOptions": {
"noImplicitAny": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"module": "amd",
"noEmitOnError": true,
"removeComments": false,
"target": "es5",
"sourceMap": true,
"declaration": true,
"outFile": "./lib/lib-b.js"
},
"exclude": [
"node_modules",
"!node_modules/@types",
"lib"
]
}
Jag får slutligen en deklarationsfil som ser ut så här:
lib\lib-b.d.ts
declare module "guid" {
export class Guid {
static EmptyGuid(): string;
}
}
Och slutligen ställde jag in nodmodulen för att inkludera typningsinformationen:
lib\package.json
{
"name": "lib-b",
"version": "1.0.0",
"description": "",
"main": "./lib/lib-b.js",
"typings": "./lib/lib-b.d.ts",
"files": [
"lib"
],
"author": "",
"license": "ISC"
}
Nu i appen som använder biblioteket tar jag in det med npm:
app\package.json
{
"name": "web-app",
"version": "1.0.0",
"description": "",
"main": "./lib/index.html",
"author": "",
"license": "ISC",
"dependencies": {
"lib-b": "file:../LibB"
}
}
Och i en av dess filer försöker jag använda biblioteket på detta sätt:
import { Guid } from 'lib-b';
Men det ger mig följande fel:
error TS2306: File '.../WebApp/node_modules/lib-b/lib/lib-b.d.ts' is not a module.
Jag har letat runt, men de flesta exempel jag hittar handlar om att skriva typings för ett redan existerande JS-bibliotek - jag kan inte hitta mycket som handlar om att använda deklarationsfilen från befintlig TypeScript-kod. Ska deklarationsfilen vara användbar i andra appar? Finns det ett annat sätt att bygga återanvändbara TypeScript-bibliotek?
Svar #1
Jag får slutligen en deklarationsfil som ser ut så här:
Rekommendera att använda commonjs och följ npm node_modules-mönstret. Du kommer att få en fil som:
export class Guid {
static EmptyGuid(): string;
}
Mer
Här är en snabbstartsvideo https://egghead.io/lessons/typescript-create-high-quality-npm-packages-using-typescript
