1. ホーム
  2. typescript

[解決済み] 'タイプ 'never'にプロパティが存在しません。

2022-03-07 12:57:50

質問

と似ています。 #40796374 が、これは型に関するもので、私はインターフェースを使っています。

以下のようなコードがあるとします。

interface Foo {
  name: string;
}

function go() {
  let instance: Foo | null = null;
  let mutator = () => {
   instance = {
     name: 'string'
   };  
  };

  mutator();

  if (instance == null) {
   console.log('Instance is null or undefined');
  } else {
   console.log(instance.name);
  }
}

プロパティ 'name' がタイプ 'never' に存在しない」というエラーが発生しました。

インスタンスが'never'であることは理解できないのですが、どうすればよいのでしょうか? どなたか教えていただけませんか?

どのように解決するのですか?

を割り当てているため instancenull . コンパイラは、それが以下のものであることはないと推論します。 null . そのため、else ブロックは決して実行されないと仮定して、次のようになります。 instance として型付けされます。 never をelseブロックの中に入れてください。

ここで、リテラル値として宣言しない場合 null で取得し、他の手段で取得する(例. let instance: Foo | null = getFoo(); ) の場合、次のように表示されます。 instance になります。 null はifブロックの中にあり Foo をelseブロックの中に入れてください。

ドキュメントは絶対に打たないでください。 https://www.typescriptlang.org/docs/handbook/basic-types.html#never

編集する

更新された例の問題は、実はコンパイラの未解決問題なのです。 ご覧ください。

https://github.com/Microsoft/TypeScript/issues/11498 https://github.com/Microsoft/TypeScript/issues/12176