表題のとおり。TypeScript 3.8.0-dev.20191126では直っていたので、3.8.0が来るまで気長に待ちましょう。
再現コードはこちら。
https://github.com/shibayu36/typescript-json-module-bug/blob/master/test.ts
import data from "./data.json"; type Data = { a: string; array: { hoge: number; }[]; }; const d1: Data = data; const d2: Data = data; // type check error ocurred const copiedData = data; const d3: Data = copiedData; // type check error didn't occur const data2 = { a: "b", c: "d", array: [{ hoge: 1 }, { hoge: 2, foo: "bar" }] }; const d4: Data = data2; const d5: Data = data2; // type check error didn't occur
https://github.com/shibayu36/typescript-json-module-bug/blob/master/data.json
{ "a": "b", "c": "d", "array": [{ "hoge": 1 }, { "hoge": 2, "foo": "bar" }] }
- jsonにobjectのarrayが含まれていて、かつobjectのarray中に余分なフィールドが含まれている時(上記の例ならfooフィールド)、importした構造を一度目に代入する時は成功するのに、二度目に代入する時は型エラーが発生する
- d1とd2への代入
- しかし、dataを一度別の変数に代入すると、同じ型の変数にも代入が成功する
- d3への代入
- importではなく普通にobjectを作成した時(data2)、それは何回代入しても型チェックは通る