首页 > 解决方案 > TypeScript:允许在具有一些具有不同值类型的键的对象上具有特定值类型的任何键

问题描述

我有两种Frontmatter

我不确定如何对此建模 - 到目前为止,我尝试了它相当简单,但它不起作用,因为"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'
}

标签: typescripttypesrecord

解决方案


推荐阅读