TypeScriptで任意の文字列を受け取るが、ある程度の定数を補完したい場合、|'aaa'|'bbb'|(string&{})で定義できる。
これの objectの属性版では{ aaa?: number, bbb?: number, [key: string]: unknown }と定義する。
JSDocでは以下のように定義する。
Record<string, unknown> & { aaa?: number, bbb?: number } |
{}で定義するとLinterに怒られる。なのでRecordを使う。
Don't use `{}` as a type. `{}` actually means "any non-nullish value". |
なお警告では Record<string, never> を使えと書いてありますが、この記事では Record<never, never> を使えと書いてある。