You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何为泛型接口数组定义正确类型

如何为routes数组设置正确类型避免TS2314报错

报错说明

触发的TS报错信息:
TS2314: Generic type 'Route ' requires 1 type argument(s).

报错原因:Route是要求传入1个类型参数的泛型接口,直接声明routes: Route[]时缺失必填的泛型参数,因此类型检查不通过。

问题复现

interface Route<T> {
  path: string
  handler: () => T
}

class Router {
  // 此处Route未传入泛型参数,触发报错
  routes: Route[] = []

  addRoute<T>(path: string, handler: Route<T>['handler']) {
    this.routes.push({
      path,
      handler
    })
  }
}

const router = new Router()
router.addRoute<string>('home', () => '123')

修复方案

如果路由数组需要兼容任意返回类型的handler,直接给Route接口的泛型参数设置默认值unknown即可,既满足泛型传参要求,也不会限制不同路由的handler返回类型:

// 给泛型T设置默认类型unknown
interface Route<T = unknown> {
  path: string
  handler: () => T
}

class Router {
  // 不传泛型参数时自动使用默认值unknown,不会触发报错
  routes: Route[] = []

  addRoute<T>(path: string, handler: Route<T>['handler']) {
    this.routes.push({
      path,
      handler
    })
  }
}

const router = new Router()
router.addRoute<string>('home', () => '123')
// 支持任意返回类型的路由注册
router.addRoute<number>('detail', () => 456)
router.addRoute<boolean>('status', () => true)

如果业务场景要求所有路由的handler返回类型统一,可以将Router定义为泛型类,在实例化时统一约束返回值类型即可。


内容的提问来源于stack exchange,提问作者Dmitriy Rudnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:21:55