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

TypeScript如何匹配字符串字面量模板的结果类型?

如何匹配TypeScript中模板字面量生成的${number}类型

要匹配To_String<number>生成的${number}类型,核心是修正条件类型的匹配语法,并调整分支顺序:

问题根源

你之前写的Number extends '${number}'是错误的——这里的'${number}'是一个普通字符串字面量(内容为${number}),而非TypeScript的模板字面量类型语法。真正代表所有数字字符串的类型是${number},不需要加引号。

正确实现方案

调整Remap类型的分支顺序,先匹配具体的数字字面量,最后匹配${number}类型:

type To_String<N extends number> = `${N}`

type Remap<Number> = 
    Number extends '0' ? 'is zero' :
    Number extends '1' ? 'is one' :
    Number extends '2' ? 'is two' :
    Number extends `${number}` ? 'is Template literal result' :
    'other number'

// 测试用例
type One = Remap<To_String<1>> // 'is one'
type OtherLiteral = Remap<To_String<5>> // 'other number'
type TemplateResult = Remap<To_String<number>> // 'is Template literal result'
type NonNumberString = Remap<'abc'> // 'other number'

关键说明

  • ${number}是TypeScript内置的特殊模板字面量类型,代表所有合法的数字字符串(包括整数、小数、负数等)。
  • 分支顺序必须优先匹配具体字面量:因为'1'、'2'这类字面量是${number}的子类型,如果把${number}分支放在前面,会直接捕获所有数字字面量,导致具体分支无法命中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:30:23