#プロパティの値の型をプロパティ名のパターン毎に定義する方法

TypeScriptでオブジェクトのプロパティの値の型をプロパティ名のパターン毎に定義するには、下記のように、Template Literal Typesを使ってプロパティ名の型を定義します。そして、それをオブジェクトの型定義で使用します。

type NumberProperty = `number${string}`
type StringProperty = `string${string}`

interface Foo {
  [bar: NumberProperty]: number,
  [baz: StringProperty]: string,
}

const foo: Foo = {
  numberA: 1,
  stringA: 'a',
}