首页 > 解决方案 > 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 中找不到

标签: typescript

解决方案


如您所知,目前没有办法注释模块的导出符合特定类型,也没有办法注释import消费端的语句。问题microsoft/TypeScript#420microsoft/TypeScript#38511是对此类功能的开放功能请求,但我不会对在不久的将来看到任何变化感到乐观。不过,您可能会解决这些问题并将您的 .

但是,编译器当然知道模块的类型,因此作为一种解决方法,您可以在某个地方进行赋值,当且仅当模块符合您的类型时,该赋值才会起作用。

对于您的示例,这可能是您项目中某处的测试代码,例如:

async function checks() {
  let check: Module = await import('./file');
}

如果成功了,那就太好了。如果不是,它会告诉您 file.ts 的哪些导出成员不符合Module

显然这是一种解决方法,因为类型检查位于与导出模块不同的位置。但这总比没有类型检查要好。

Stackblitz 示例


推荐阅读