3

作为一名 Typescript 新手,作为学习过程的一部分,我正在尝试尽可能准确地键入所有内容。

我有一个lqip来自 CMS 的(低质量图像占位符)属性,它应该是 base64 编码的图像。它显然是一个字符串,但是将其作为字符串输入感觉有点不精确。

mainImage: Schema.Post["mainImage"] & {
  //  can I be more precise? It should be always a base64 encoded image, not just a generic string…
  // e.g. "data:image/jpeg;base64,/9j/2wBDAAYEB…"
  lqip: string
}

Typescript 中是否有 base64 编码图像的类型?我试图广泛地搜索谷歌,但我只找到了关于atob/btoa转换的主题,而不是类型本身。谢谢!

4

2 回答 2

2

我不认为有,但是您可以创建自己的类型作为字符串类型的别名,因此当您查看代码时,您可以消除常规字符串和基本类型之间的歧义。

type Base64 = string
mainImage: Schema.Post["mainImage"] & {
  lqip: Base64
}


于 2021-04-03T12:28:35.317 回答
2

不透明类型在这里可以为您提供额外的安全性,而 TypeScript 本身不支持它们,可以将某些东西组合在一起

type Opaque<T, K extends string> = T & { __typename: K }

type Base64 = Opaque<string, "base64">

const decodeBase64 = (base64String: Base64) => {
  return Buffer.from(base64String, "base64").toString("utf8")
}

const str = "a"
decodeBase64(str) // errors

const str2 = "a" as Base64
decodeBase64(str2) // valid

您现在可以编写类型保护或运行时检查并断言字符串是 Base64 以提高安全性

于 2021-04-10T09:07:41.780 回答