如何在模块导出中使用satisfies确保符合指定类型?
模块导出类型校验与
satisfies的使用问题 问题描述
我希望用satisfies确保模块导出符合Route类型的要求,具体尝试如下:
在types.ts中定义类型:
export type Route = { pathname: string; handler: Promise<Response>; }
然后在路由模块中尝试编写代码:
import type { Route } from './types.ts'; export const pathname = '/test' export const handler = async () => { return new Response('test'); } this satisfies Route
但出现错误:Type 'undefined' does not satisfy the expected type 'Route'.
我试过this、self等关键字都无效,想知道能不能实现这类需求?另外,下面的写法是不是最接近的可行方案?
import type { Route } from './types.ts'; const pathname = 'test' const handler = async () => { return new Response('test'); } export default {pathname, handler} satisfies Route
解决方案
模块顶级无法直接用
satisfies校验导出集合
模块顶级作用域里的this(或self)在Node.js、浏览器等模块环境中都是undefined,所以直接写this satisfies Route必然报错,这种方式不可行。你的默认导出方案是可行的,但还有更灵活的选择
如果需要保留命名导出的形式,可以先将所有导出字段组合成对象,用satisfies完成类型校验后再解构导出:
import type { Route } from './types.ts'; // 先组合成对象并做类型校验 const route = { pathname: '/test', handler: async () => new Response('test'), } satisfies Route; // 解构为命名导出 export const { pathname, handler } = route;
这种方式既满足了Route类型的约束,又能保持命名导出的结构,比默认导出的方案更灵活。
如果不需要命名导出,你提供的默认导出写法就是完全可行的方案。
内容的提问来源于stack exchange,提问作者kejedi
相关产品推荐
相关产品推荐

