Open2

TypeScript の困った型エラーを解消したい

かしかし
type X =
  | { a: { x: null } }
  | { a: { x: string } };

const a: { x: string | null } = { x: 'a' };

const x: X = { a };

とすると下のようなエラーが出る

Type '{ a: { x: string | null; }; }' is not assignable to type 'X'.
  Type '{ a: { x: string | null; }; }' is not assignable to type '{ a: { x: string; }; }'.
    The types of 'a.x' are incompatible between these types.
      Type 'string | null' is not assignable to type 'string'.
        Type 'null' is not assignable to type 'string'.ts(2322)
かしかし

X の型がこんな感じになってたら問題ない(stringnull のプロパティを持つ object ではなく、 stringnull そのもの)

type X =
  | { a: null }
  | { a: string };

const a: string | null = 'a';

const x: X = { a };