打字稿:在另一个中定义一个原语

Typescript: define a primitive within another

问题是,当我收到 API 的回复时,这是我认为迄今为止处理过的最不一致的回复。无论如何,我想做的是使用 Typescript 提供更多结构。例如:

interface Response {
  foo: string
}

我遇到的问题是 EVERYTHING 是一个字符串:foo 可能是 "true" || "123" || "undefined" || "null"

但我知道会有一些价值观存在。所以我知道这个字段将始终是 string 类型,但在该字符串中将是 number

我想创建一个 class 或如下所示的界面:

interface Response {
  foo: string<number>
}

因为现在我只在所有内容旁边加上注释,例如:

interface Response {
  service: string // string("true")
}

考虑这个例子:

type Primitives = boolean | number | null | undefined

type MakeString<T extends Primitives> = `${T}`

// "undefined" | "null" | `${number}` | "false" | "true"
type Result = MakeString<Primitives>

Playground

如果您对T extends any

感到困惑,请参阅distributive-conditional-types

TL;TRT 包装到模板文字字符串中会分配并集。

感谢@Clarity