Typescript中的自定义npm包:找不到自定义接口的名称

时间:2018-10-13 14:02:40

标签: typescript npm

我在用webpack构建的打字稿中有角度应用程序。 我还有具有下一个结构的npm软件包(在Sinopia中托管,不是npm)

my-custom-npm-package
- index.ts
- studentStorage.ts
- student.d.ts

student.d.ts

interface IStudent
{
    name: string;
    id: number;
}

index.ts

import { StudentStorage } from './studentStorage';
export { StudentStorage }

studentStorage.ts

export class StudentStorage{
    private students: IStudent[] = [];

    public get(): IStudent[]{
        return this.students.slice(0);
    }   
}

在我的角度组件中,我有这个字符串

import { StudentStorage } from 'my-custom-npm-package';

接下来,我会在webpack中遇到此错误

ERROR in D:\Sandbox\MultiLanguage\node_modules\my-custom-npm-package\studentStorage.ts
(2,23): error TS2304: Cannot find name 'IStudent'.

我有解决方法: 在我写的地方创建

/// <reference path="node_modules/my-custom-npm-package/student.d.ts" />

但是我想在没有此修复程序的情况下使用我的自定义npm软件包。 我要安装而不引用.d.ts文件。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

一种解决方案可能是将/// <reference path="student.d.ts" />添加到studentStorage.ts。但是在您的库的其余部分位于模块中时,将IStudent设置为全局是很奇怪的。我建议将student.d.ts更改为以下模块:

export interface IStudent
{
    name: string;
    id: number;
}

studentStorage.ts到:

import { IStudent } from "./student";
export class StudentStorage{
    private students: IStudent[] = [];

    public get(): IStudent[]{
        return this.students.slice(0);
    }   
}

然后,您的库中要使用IStudent的客户端只需导入它即可。