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

但是,当我尝试在npm package.json 上发布属性为类型为的包时,此生成的定义文件显然不起作用。我创建了另一个项目对其进行测试。

它提示消息:“导出的外部软件包文件类型文件'... d.ts'不是一个模块。请与软件包作者联系以更新软件包定义”。

这是我的源文件:

MyInterface.ts

export interface MyInterface
{
    MyProperty: string;
}

MyClass.ts
import {MyInterface} from './MyInterface';

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

MyInheritedClass.ts
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.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;
    }
}

我还有另一件事要做吗,或者生成的定义据说在package.json类型中不起作用?

更新以获取更多详细信息:

该方案是我有2个项目:
  • 第一个项目是我生成将发布到npm的库的地方,而package.json是我将类型属性链接到由tsc -d命令生成的mydefinition.d.ts文件的地方。
  • 我创建的第二个项目通过添加生成的包(带有类型)来测试第一个项目。

  • 与2个项目的链接以及该场景的另一个链接:

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

    我认为问题出在第一个链接上,“您的定义文件应作为外部模块编写”。
    但是我想知道是否有一种方法可以生成生成的定义,并将其放在package.json的typesings属性中。

    重现该问题:
  • 克隆此仓库:https://github.com/jvitor83/test-typings-packagejson
  • 执行“npm install”,使用VSCode打开,然后转到文件“src/test.ts”。
  • 最佳答案



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

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

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

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

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

    关于node.js - TypeScript生成的定义文件(.d.ts)无法与package.json键入配合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37091321/

    10-12 15:22