typescript - TypeScript:允许在具有一些具有不同值类型的键的对象上具有特定值类型的任何键
问题描述
我有两种Frontmatter
:
FrontmatterTaxonomy
,它是一个对象,kind: "taxonomy"
并且 ataxnomyName
是一个string
。FrontmatterContent
,这是一个对象,kind: "content"
它也应该允许任何其他键,只要它们的值是string[]
。
我不确定如何对此建模 - 到目前为止,我尝试了它相当简单,但它不起作用,因为"content"
它不是 type "TaxonomyTerms"
。
我怎么能做到这一点?
type TaxonomyTerms = string[]
type TaxonomyData = Record<string, TaxonomyTerms>
// alternative, doesn't work either
// type TaxonomyData = { [taxonomyTerm: string]: string[] }
type FrontmatterContent = TaxonomyData & {
kind: 'content'
}
interface FrontmatterTaxonomy {
kind: 'taxonomy'
taxonomyName: string
}
type Frontmatter = FrontmatterContent | FrontmatterTaxonomy
// Doesn't work.
// Type 'string' is not assignable to type 'TaxonomyTerms'
const fm1: Frontmatter = {
kind: 'content',
tags: ['foo', 'bar']
}
// Works.
const fm2: Frontmatter = {
kind: 'taxonomy',
taxonomyName: 'categories'
}
解决方案
推荐阅读
- android - Android FirebaseUI 登录时出现 Google 错误以获取发布密钥
- python - 在 python 中使用 smtp 类发送自动电子邮件
- database - 有条件地从 postgres 中的数据库中删除重复项
- c - 在任何给定平台上,C 中的哪些类型大小将保持不变?
- php - 根据字符串的一部分对 foreach 结果进行排序 - PHP
- javascript - 是否有快速方法/快捷方式来扩展 VS 代码括号中的内容(不折叠/扩展方法)
- delphi - Firebird / DELPHI - 不支持嵌套事务
- python - 如何从数据流中的谷歌存储桶中读取 csv 文件,组合,对数据流中的数据帧进行一些转换,然后将其转储到 bigquery 中?
- python - 如何从机器人向另一个用户发送消息
- java - 为什么 Android Studio 自动内联导入类而不是在我的代码顶部?