如何创建带有默认导出和功能的定义打字稿文件?

时间:2019-01-02 16:55:51

标签: typescript typescript-definitions

我必须使用内部库对用户进行身份验证,但是现在我必须在打字稿项目中使用此库,因此我试图创建其定义文件(.d.ts),但我什么都没有已经尝试过作品。

通常我会这样使用它:

import login from 'int-login';
...
login.requestAuth('admin', 'admin').then(user => console.log(user));

所以我试图创建这样的定义文件:

declare module 'int-login' {
    export default class login {
        requestAuth(username: string, password: string);
    }
}

但这是返回的错误:类型'typeof login'上不存在属性'requestAuth'。 我试图将函数移出“登录”类,但随后提示说,如果我将其导入到打字稿文件中,则登录不存在。

1 个答案:

答案 0 :(得分:0)

定义文件的格式取决于定义文件是与库一起打包还是位于依赖库的项目中。如果要使用库打包定义,请删除declare module包装器,并确保库"types"文件中有一个package.json属性,其中包含定义文件的位置。

您似乎希望requestAuth返回一个Promise,因此您需要在定义中指出返回类型。

定义文件应具有此内容。

export interface User {
    // list appropriate property types here
}

export default class login {
    requestAuth(username: string, password: string): Promise<User>;
}

另一方面,如果定义文件位于依赖于int-login的项目中(可能位于types/文件夹中),或者位于单独的@types/int-login包中,则您 需要declare module包装。您还需要确保定义文件包含在"include"中的tsconfig.json配置值中。在这种情况下,定义文件将如下所示:

declare module "int-login" {
    export interface User {
        // list appropriate property types here
    }

    export default class login {
        requestAuth(username: string, password: string): Promise<User>;
    }
}