typescript - typescript 静态类型检查 ES 模块导出
问题描述
是一种静态类型检查es模块导出的方法吗?如下代码所述
// file.ts
export const x = 4
export const y = 'whatever'
export const foo = () => 2
// the interface describes the what the module exports
interface Module {
x: 4
y: string
foo: () => number
}
我希望 file.ts 中的导出满足接口模块。打字稿可以处理这个吗?或者与此问题相关的任何问题,我在 github repo 中找不到
解决方案
如您所知,目前没有办法注释模块的导出符合特定类型,也没有办法注释import
消费端的语句。问题microsoft/TypeScript#420和microsoft/TypeScript#38511是对此类功能的开放功能请求,但我不会对在不久的将来看到任何变化感到乐观。不过,您可能会解决这些问题并将您的 .
但是,编译器当然知道模块的类型,因此作为一种解决方法,您可以在某个地方进行赋值,当且仅当模块符合您的类型时,该赋值才会起作用。
对于您的示例,这可能是您项目中某处的测试代码,例如:
async function checks() {
let check: Module = await import('./file');
}
如果成功了,那就太好了。如果不是,它会告诉您 file.ts 的哪些导出成员不符合Module
。
显然这是一种解决方法,因为类型检查位于与导出模块不同的位置。但这总比没有类型检查要好。
推荐阅读
- laravel - Eloquent 自定义关系 hasMany(外域包含由外键连接的文本)
- node.js - Sequelize @6.3.4 无法连接到 docker -> postgres
- c++ - BIO 不刷新 OpenSSL 中的数据
- sql - SQL查询求和列直到满足行条件并继续求和列
- python - 当消费者包含在命名列表中时,asyncio.Queue 生产者-消费者流无法处理异常
- r - 用 if 条件分隔列
- r - 从日期时间创建日期时无法修改时区
- python - 如何读取多个 csv 文件并将它们转换为 3d 数据框
- pandas - 将 TFRecords 和 tf.Examples 转换为常用数据类型
- android - 如何在发送到android中的服务器之前压缩任何图像文件?