如何对模块的导出符号进行类型检查?
例如,考虑一个基于插件的系统,其中插件必须实现并导出预定义的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中使用吗?如果可以,怎么办?
答案 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