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

如何在Typescript中实现基于kind的类型推断与switch分支完备性校验

TypeScript 严格类型匹配实现方案

以下是同时满足你两个需求的可运行实现,基于最新稳定版 TypeScript 即可支持:

type KindA = {kind:'a'};
type KindB = {kind:'b'};
type KindC = {kind:'c'};
type AllKinds = KindA | KindB | KindC;

// 泛型绑定输入kind类型与返回值类型
function create<T extends AllKinds['kind']>(kind: T): Extract<AllKinds, { kind: T }> {
  switch(kind) {
    case "a": return {kind:'a'};
    case "b": return {kind:'b'};
    case "c": return {kind:'c'};
    // 穷尽性检查,缺失分支时直接编译报错
    default:
      const _exhaustiveCheck: never = kind;
      throw new Error(`未知类型: ${_exhaustiveCheck}`);
  }
}

// 调用时自动推断返回值类型:输入"a"返回值类型自动为KindA
const res = create("a");

需求匹配说明

  • 满足switch缺失分支提示:如果后续新增KindD类型扩展了AllKinds,但没有在switch中添加对应case,default处的_exhaustiveCheck赋值会直接触发编译错误,提醒你补全分支。
  • 满足输入输出类型绑定:泛型T直接关联输入参数kind的字面量类型,通过Extract工具类型从联合类型AllKinds中匹配对应的返回类型,无需使用as T这类不安全的类型断言,每个case的返回值都会被严格校验,比如case "a"返回{kind:'b'}会直接触发编译报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:27:03