【问题标题】:Export types from module从模块中导出类型
【发布时间】:2018-04-16 09:35:57
【问题描述】:

我用 ts 写代码已经有一段时间了,但我仍然不明白 wwitch 是从模块中导出函数和类型的正确方法。

这是上下文:

  • Typescript 2.7,节点 9。

    1. 具有导出函数和类型的语言环境模块 A
    2. 模块 B 添加模块 A 作为依赖,它使用从 A 导出的函数和类型

在我的项目中,当我声明类型时,我更喜欢使用 @types 文件夹和 d.ts 文件。例如:

declare type Message = {
   message: string
}

这样在使用的时候就不需要显式地导入类型了。

但我无法理解如何导出它。 我可以导出类型的唯一方法是使用接口。

export interface IMessage {
    message: string
}

但是这样我必须在需要的时候在ts文件中导入then接口,我想避免这种情况。

你能帮我理解正确的方法吗?

【问题讨论】:

  • 为什么需要导出这些类型?您的意思是导出它们以供其他项目使用?因为,正如你所说,通过创建d.ts 文件,不需要导入类型
  • 是的,我想导出类型以供其他项目使用。
  • 一种可能的解决方案:index.d.ts: declare type MessageType = { message: string; } index.ts:导出接口 IMessageType 扩展 MessageType {}

标签: node.js typescript module


【解决方案1】:

如果您需要导出类型以供其他项目使用,请更改您的tsconfig.json并添加declaration: true。这将使 TypeScript 编译器为您的所有类型发出声明文件。

此外,如果你这样做,你可以从模块中导出类型

export type Action = () => void;

那你就可以了

import { Action } from './module';

它会完美运行

【讨论】:

  • 我启用了该标志,但它似乎不像 typescript 2.8.1 中的那样工作
  • 这不能与"isolatedModules": true, 一起使用,似乎create-react-app 需要...
【解决方案2】:

我认为“完全”做你想做的事是不可能的。例如:typescript pack(来自 npm)使用 interface String {..} 然后将其导出。所以,如果你想避免接口我认为是不可能的,但你可以添加你的自定义类型文件。

这是一个例子:How to add custom "typings" in typescript 2.0

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 2020-12-14
    • 2021-08-25
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2020-06-27
    • 2019-10-27
    相关资源
    最近更新 更多