1

私のコードは次のとおりです。

export function testGraph({ id = 0, name = "test", nodes = [] }): Graph {
  if (nodes.length === 0) {
    const dummyNode = testNode({});
    return new Graph(id, name, [dummyNode]);
  }

  return new Graph(id, name, nodes);
}
export function testDatabase({ id = 0, name = "test", graphs = [] }): Database {
  if (graphs.length === 0) {
    const dummyGraph = testGraph({ nodes: new Array(new Node(0)) });
    return new Database(id, name, [dummyGraph]);
  }

  return new Database(id, name, graphs);
}

しかし、これにより次のエラーが発生します。

Type 'Node[]' is not assignable to type 'never[]'.
      Type 'Node' is not assignable to type 'never'.

    40     const dummyGraph = testGraph({ nodes: new Array(new Node(0)) });
                                          ~~~~~

これが自動的に「決して」タイプを推論する理由を理解できないようです。タイプを明示的に宣言しようとしましたが、うまくいきませんでした。

4

2 に答える 2

1

Github に関するこの議論は、この問題に光を当てています。

strictこれはとの組み合わせが原因noImplicitAny: falseです。strict一般に、 がオンの場合、noImplicitAnyもオンであることが期待されます。この特定の設定セットにより、奇妙な動作が発生します。[]両方をオンにすると、暗黙的に存在するというエラーが表示されany[]ます。両方がオフの場合。number[]制御フロー分析を使用して、配列をpush(1);の後に扱います。

設定の特定の組み合わせ ( "strict": true, "noImplicitAny": false,) は、制御フロー分析を使用したり、配列を暗黙的に にしたりすることを許可しないことを意味するany[]ためnever[]、残りの唯一の許容可能なオプションです。

strict使用しない場合はオフにすることをお勧めしますnoImplicitAny

だから、これは可能な方法かもしれません

export function testGraph({ id = 0, name = "test", nodes = [] as Array<Node> }): Graph {
...

于 2021-01-06T18:26:41.053 に答える