Объявление машинописного текста из общей библиотеки с использованием requirejs

Я пытаюсь написать библиотеку машинописного текста, которая используется несколькими другими приложениями машинописного текста. Чтобы сделать это, я поместил каждую библиотеку в отдельный модуль узла и установил библиотеку для создания своего файла объявления.

Для проверки у меня есть настройка общей библиотеки с одним файлом:

библиотека\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"
  ]
}

В итоге я получаю файл объявления, который выглядит так:

lib\lib-b.d.ts

declare module "guid" {
    export class Guid {
        static EmptyGuid(): string;
    }
}

И, наконец, я установил модуль узла, чтобы он включал информацию о наборе текста:

библиотека\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"
}

Теперь в приложении, которое использует библиотеку, я вношу ее с помощью npm:

приложение\package.json

{
  "name": "web-app",
  "version": "1.0.0",
  "description": "",
  "main": "./lib/index.html",  
  "author": "",
  "license": "ISC",
  "dependencies": {
    "lib-b": "file:../LibB"
  }
}

И в одном из его файлов я пытаюсь использовать библиотеку так:

import { Guid } from 'lib-b';

Но это дает мне следующую ошибку:

error TS2306: File '.../WebApp/node_modules/lib-b/lib/lib-b.d.ts' is not a module.

Я искал вокруг, но большинство примеров, которые я нашел, говорят о написании типов для уже существующей библиотеки JS - я не могу найти много, что говорит об использовании файла объявления из существующего кода машинописи. Должен ли файл декларации использоваться в других приложениях? Есть ли другой способ создания повторно используемых библиотек машинописных текстов?


person cschear    schedule 08.05.2017    source источник
comment
Где "file:../LibB"?   -  person Shaun Luttin    schedule 09.05.2017
comment
Запись файла в приложении указывает на модуль общей библиотеки.   -  person cschear    schedule 09.05.2017
comment
Вам нужно использовать amd или вы можете использовать commonjs?   -  person Shaun Luttin    schedule 09.05.2017


Ответы (1)


В итоге я получаю файл объявления, который выглядит так:

Рекомендуем использовать commonjs и следовать шаблону npm node_modules. Вы получите файл вида:

export class Guid {
    static EmptyGuid(): string;
}

Более

Вот краткое видео https://egghead.io/lessons/typescript-create-high-quality-npm-packages-using-typescript

person basarat    schedule 09.05.2017