【问题标题】:Typescript: define a primitive within another打字稿:在另一个中定义一个原语
【发布时间】:2021-12-23 00:09:08
【问题描述】:

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

interface Response {
  foo: string
}

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

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

我想要创建一个如下所示的类或接口:

interface Response {
  foo: string<number>
}

因为现在我只在以下所有内容旁边添加注释:

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

【问题讨论】:

  • 您可以将问题的标题更新为:TypeScript: stringify original type

标签: typescript template-literals


【解决方案1】:

考虑这个例子:

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

【讨论】:

  • 它确实可以在没有分配类型的情况下工作,即type MakeString&lt;T extends Primitives&gt; = ${T} 或者我错过了什么?
  • @Clarity 你是对的,没试过。似乎模板文字已经分发了它。谢谢!
  • 谢谢你把事情弄清楚了!在打字稿文档中很难找到此类信息
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2016-07-26
  • 2016-07-30
  • 2018-08-11
相关资源
最近更新 更多