Сгенерированный файл определения (.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.
воспроизвести проблему:
клонировать это РЕПО:https://github.com/jvitor83/test-typings-packagejson
Do 'npm install', откройте с помощью VSCode и перейдите в файл ' src / test.ts'.
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.
затем добавить пакет.json в модуле npm, который вы хотите опубликовать, как показано ниже, рассмотрим имя модуля фу
пакета.в JSON
{
"name": "foo",
"author": "author name",
"version": "1.0.0",
"main": "lib/index.js",
"typings": "lib/index.d.ts"
}
теперь добавьте папку foo внутри node_module, окончательная структура для второго проекта будет чем - то вроде ниже
наконец-то в вашем тесте.TS файл импорта и использования,