2

Using TypeScript 4.6.4, I have a list of keywords and a Paragraph interface where these keywords are referenced:

const keyswordsAndSynonyms = {
    keyword1: ["synonym1", "synonym2"],
    keyword2: ["synonym3", "synonym4"],
} as const

interface Paragraph {
  content: string
  keywords: Array<keyof typeof keyswordsAndSynonyms>
}

const myParagraph: Paragraph = {
  content: "bla bla",
  keywords: ["keyword1", "foo dahoo"]
}

So far, so good. TypeScript complains that "foo dahoo" is wrong - as it should.

Now I want to type keyswordsAndSynonyms itself. (Just to be save so that no one can accidentally use a flat string as synonym or a number as keyword or whatnot.)

However, when typing keyswordsAndSynonyms as Record<string, readonly string[]>, the type restrictions for keywords stop working. I can now use "foo dahoo" without TypeScript complaining about it.

How come and how can I solve that?

cis
  • 1,259
  • 15
  • 48

0 Answers0