打字稿检查导出的界面

时间:2019-11-10 11:11:49

标签: typescript

如何对模块的导出符号进行类型检查?

例如,考虑一个基于插件的系统,其中插件必须实现并导出预定义的API(例如函数原型或接口)

type MyPluginCallback = (foo: string) => number;

实现插件时,如果插件未实现给定的API,我会遇到构建错误。

/* OK */
module.exports = function myPlugin(foo: string): number {
  /* ... */
}

/* Error, wrong prototype */
module.exports = function myPlugin(bar: number): number {
  /* ... */
}

可以在Typescript中使用吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:1)

您可以将type assertion as MyPluginCallback用于此目的。 as MyPluginCallback在将类型MyPluginCallback分配给手边的函数表达式之前执行类型兼容性检查。

type MyPluginCallback = (foo: string) => number

module.exports = function myPlugin_OK(bar: string): number {
  return 42
} as MyPluginCallback // ✅

module.exports = function myPlugin_Error(bar: number): number {
  return 42
} as MyPluginCallback // ?

或者将函数分配给MyPluginCallback类型的变量,然后在第二步中将其导出。

const myPlugin_OK: MyPluginCallback = (bar: string): number => 42 // ✅
const myPlugin_Error: MyPluginCallback = (bar: number): number => 42 // ?

module.exports = myPlugin_OK
module.exports = myPlugin_Error