导出打字稿类型定义

时间:2021-03-27 15:16:19

标签: javascript typescript

在我的项目中,我希望有一个包含所有 typescript 定义的文件,如下所示:

type_defs.tsx

interface T_oauth_obj {
    oauth_callback: string,
    oauth_consumer_key: string,
    oauth_nonce: string,
    oauth_signature_method: string,
    oauth_timestamp: string,
    oauth_version: number,
    oauth_signature: string,
}

interface IAuthRequests {
    getRequestToken: () => string
    Authorize(): void
    getAccessToken(): void  
}
...

问题是,当我尝试像这样导出 typedef 时:

export {IAuthRequests, T_oauth_obj}

我收到错误:

Re-exporting a type when the '--isolatedModules'...

正如我在网上发现的那样,typedef 文件只能默认导出,这意味着我必须为每个类型定义准备一个文件,这绝对是荒谬的!

在我看来,不允许对 typedef 进行多个非默认导出的约束完全是无稽之谈,并且使编码变得多余且难以重用。拥有一个包含所有类型定义的文件有助于让代码更整洁、更易于调试。

附言

有没有办法实现我所说的目标?

2 个答案:

答案 0 :(得分:1)

试试这个:

export interface T_oauth_obj {
    oauth_callback: string,
    oauth_consumer_key: string,
    oauth_nonce: string,
    oauth_signature_method: string,
    oauth_timestamp: string,
    oauth_version: number,
    oauth_signature: string,
}

export interface IAuthRequests {
    getRequestToken: () => string
    Authorize(): void
    getAccessToken(): void  
}

然后导入:

import { T_oauth_obj, IAuthRequests } from "your.file"

答案 1 :(得分:1)

您的导出类型可以被命名,或者每个文件可以有一个默认类型导出。 export 关键字根本不允许导出多个值。

因此,由于它一次仅适用于一个值或类型,因此这将不起作用,因为 {IAuthRequests, T_oauth_obj} 不是有效的单一类型。

您可以对整个类型进行默认导出,但这可能不是您想要的:

export default { req: IAuthRequests, oauth: T_oauth_obj }

或者你可以这样做:

export interface IAuthRequests { ... }
export interface T_oauth_obj { ... }

如果您希望一个 export 关键字导出多个命名类型,那么我只能说它不这样做。要回答为什么您可能必须询问打字稿维护者。答案很可能是经过深思熟虑的设计选择,以更紧密地匹配 export 纯 JS 的工作方式。