TypeScript如何导出其他模块的函数签名至接口或命名空间?
解决TypeScript导出外部函数到接口/命名空间的问题
嘿,我来帮你理顺这个TypeScript的语法问题~你原来的代码里用了=来给接口成员赋值,这是不对的,因为接口只能定义类型约束,不能直接赋值值成员,得用正确的语法来实现你的需求,分两种场景给你讲:
一、把外部函数的类型导出到接口中
如果你的目标是在接口里定义一个类型与myFunction一致的成员,或者让接口直接代表这个函数的类型,正确写法如下:
场景1:接口包含函数类型的属性
import { myFunction } from './a'; // 定义接口,其中包含一个类型与myFunction一致的属性 export interface MyInterface { // 用冒号指定属性的类型为myFunction的类型 myFunction: typeof myFunction; }
场景2:接口直接表示该函数的类型
如果你想让接口本身就等同于myFunction的函数类型,可以这样写:
import { myFunction } from './a'; // 让接口继承myFunction的函数类型 export interface MyInterface extends typeof myFunction {} // 或者更直观的类型别名写法(和接口效果类似,按需选择) export type MyFunctionType = typeof myFunction;
二、把外部函数本身导出到命名空间中
如果你的需求是把函数**本身(值)**导出到命名空间里(因为命名空间可以包含值成员),语法就简单多了:
import { myFunction } from './a'; export namespace MyNamespace { // 直接把外部导入的函数作为命名空间的导出成员 export const myFunction = myFunction; // 同时也可以导出它的类型 export type MyFunctionType = typeof myFunction; }
关键注意点
- 接口里只能写类型相关的定义,必须用
:来指定类型,不能用=赋值; - 命名空间既可以包含值(比如函数、变量),也可以包含类型,所以导出值的时候直接用
export const即可。
内容的提问来源于stack exchange,提问作者Nicolas Penin
相关产品推荐
相关产品推荐

