Сгенерированный файл определения (.d.ts) по typescript не работает с пакетом.в JSON typings

Я создал файл определения (d.ts) из моего проекта typescript, используя аргумент --declaration из компилятора tsc.

но этот сгенерированный файл определения, по-видимому, не работает, когда я пытаюсь опубликовать пакет со свойством typings в НПМ .в JSON. Я создал еще один проект, чтобы проверить его.

он жалуется с сообщением:"экспортировать внешний пакет typings файл "файл"...d.ts ' не является модулем. Пожалуйста, обратитесь к автору пакета обновления пакет".

Это мои исходные файлы:

MyInterface.ТС

export interface MyInterface
{
    MyProperty: string;
}

MyClass.ТС

import {MyInterface} from './MyInterface';

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

MyInheritedClass.ТС

import {MyClass} from './MyClass';

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

команда tsc такова:

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

это сгенерированное определение:

mydefinition.д.ТС

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;
    }
}

Is там еще одна вещь, которую я должен сделать, или сгенерированное определение, предположительно, не работает в пакете.в JSON typings ??

обновление для более подробной информации:

сценарий заключается в том, что у меня есть 2 проекта:

  • первый проект, где я создаю библиотеку, где я буду публиковать в npm, и пакет.JSON-это где я положил typings свойство привязка к mydefinition.d.TS-файл, созданный командой tsc-D.

  • второй проект, который я создаю для тестирования первого, добавив созданный пакет (с наборами).

ссылка на 2 проекта и другие ссылки для сценария:

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

Я думаю, что проблема заключается в том, что "ваши файлы определений должны быть записаны как внешние модули" по первой ссылке. Но я хочу знать, есть ли способ получить их. определения, созданные для размещения в свойстве typings пакета.формат JSON.

воспроизвести проблему:

2 ответов


решение:

1-добавить индекс одного файла.ТС', который экспортирует все остальные файлы.

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

2 - Добавить в процессе сборки две компиляции / транспиляции файлов (один для объявлений, а другой для одного JS-файла [со свойством out в компиляторе tsc])

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'});

дополнительная информация в процессе сборки: https://github.com/jvitor83/typings-packagejson/blob/master/gulpfile.js

и индексный файл: https://github.com/jvitor83/typings-packagejson/blob/master/app/src/typings-packagejson.ts


когда вы получаете эту ошибку?

я использовал сгенерированный d.TS файл в другом проекте и работает нормально.

   /// <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();

и при компиляции он генерирует 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();

вы получаете эту ошибку при использовании этого в каком-то HTML-файле? Вы включили определение mydefinition.JS-файл в HTML?

обновление

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

.ТС

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

добавить tsconfig.файл json для легкого построения,

tsconfig.в JSON

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

Примечание. я сделал его модулем commonjs (не уверен, что он работает для ваших нужд), создайте сборку с помощью команды tsc. Он будет генерировать файлы, как показано ниже Примечание он добавил JS файлы для всех TS файлов и d.ts также для всего модуля, но так как мы экспортировали весь модуль из одного файла будет проще использовать в пакете.файл json для модуля npm.

enter image description here

затем добавить пакет.json в модуле npm, который вы хотите опубликовать, как показано ниже, рассмотрим имя модуля фу

пакета.в JSON

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

теперь добавьте папку foo внутри node_module, окончательная структура для второго проекта будет чем - то вроде ниже

enter image description here

наконец-то в вашем тесте.TS файл импорта и использования,