由typescript生成的定义文件(.d.ts)不与package.json类型一起使用

jvi*_*r83 9 node.js typescript

我使用tsc编译器中的--declaration参数从我的typescript项目创建了一个定义文件(d.ts).

但是,当我尝试与物业发布该数据包这个生成定义文件显然是不行的分型,在故宫的package.json.我创建了另一个项目来测试它.

它抱怨消息:" 导出的外部包文件打包文件'... d.ts'不是模块.请联系包作者以更新包定义 ".

这是我的源文件:

MyInterface.ts

export interface MyInterface
{
    MyProperty: string;
}
Run Code Online (Sandbox Code Playgroud)

MyClass.ts

import {MyInterface} from './MyInterface';

export class MyClass implements MyInterface
{
    get MyProperty(): string
    {
        return "MyString";
    }
}
Run Code Online (Sandbox Code Playgroud)

MyInheritedClass.ts

import {MyClass} from './MyClass';

export class MyInheritedClass extends MyClass
{
    public MyMethod(): number
    {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

tsc命令是这样的:

tsc MyClass.ts MyInterface.ts MyInheritedClass.ts --declaration -t es5 -outFile "mydefinition.js" --module "system"
Run Code Online (Sandbox Code Playgroud)

这是生成的定义:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有其他的事情我必须做或生成的定义据说不适用于package.json打字?

更新更多详情:

场景是我有2个项目:

  • 第一个项目是我生成库的地方,我将发布到npm,而package.json是我将typings属性链接到tsc -d命令生成的mydefinition.d.ts文件的地方.

  • 我创建的第二个项目是通过添加生成的包(带有打字)来测试第一个项目.

与2个项目的链接和场景的另一个链接:

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

我认为问题在于第一个链接上的"你的定义文件应该写成外部模块".但我想知道是否有办法将这些定义生成放在package.json的typings属性中.

重现问题:

jvi*_*r83 3

解决方案是:

1 - 添加导出所有其他文件的单个文件“index.ts”。

export * from "./MyInterface"
export * from "./MyClass"
export * from "./MyInheritedClass"
Run Code Online (Sandbox Code Playgroud)

2 - 在构建过程中添加两个文件编译/转换(一个用于声明,另一个用于单个 js 文件 [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'});
Run Code Online (Sandbox Code Playgroud)

构建过程的更多信息:https://github.com/jvitor83/typings-packagejson/blob/master/gulpfile.js

和索引文件:https://github.com/jvitor83/typings-packagejson/blob/master/app/src/typings-packagejson.ts