在我的项目中,我希望有一个包含所有 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 进行多个非默认导出的约束完全是无稽之谈,并且使编码变得多余且难以重用。拥有一个包含所有类型定义的文件有助于让代码更整洁、更易于调试。
附言
有没有办法实现我所说的目标?
答案 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 的工作方式。