web-dev-qa-db-ja.com

Typescriptのオプションの連鎖演算子

JavaScriptでは、オプションの連鎖演算子が babelプラグイン でサポートされています。

しかし、TypeScriptでこれを行う方法を見つけることができません。何か案が?

29
cwtuan

執筆時点では、TypeScriptはオプションの連鎖演算子をサポートしていません。 TypeScript課題トラッカーの説明を参照してください: https://github.com/Microsoft/TypeScript/issues/16

警告として、この演算子のセマンティクスは依然としてvery流動的であり、TypeScriptがまだ追加していないのはこのためです。 Babelプラグインに対して今日記述されたコードは、将来、警告なしに動作を変更し、困難なバグを引き起こす可能性があります。一般に、動作がまだ明確に定義されていない構文の使用を開始しないことを推奨します。

21
Ryan Cavanaugh

TypeScriptとコミュニティはこの演算子に賛成していますが、TC39が 現在の提案を固めるまでは、この執筆時点ではstage 1)代替手段を使用する必要があります。

Devツールを犠牲にすることなく、オプションのチェーンに近いを取得する1つの選択肢がありますhttps://github.com/rimeto/ts-optchain

この記事 ネイティブチェーン演算子をミラー化しようとして作成者が達成できたことを記録します。

  1. チェーンプロパティアクセスを厳密に反映する構文を使用する
  2. トラバースが失敗したときにデフォルト値の簡潔な表現を提供する
  3. IDEコード補完ツールとコンパイル時パス検証を有効にする

実際には、次のようになります。

import { oc } from 'ts-optchain';

// Each of the following pairs are equivalent in result.
oc(x).a();
x && x.a;

oc(x).b.d('Default');
x && x.b && x.b.d || 'Default';

oc(x).c[100].u.v(1234);
x && x.c && x.c[100] && x.c[100].u && x.c[100].u.v || 1234;

TypeScriptで提案が採用されると、このような代替案はおそらく不要になることに留意してください。

また、この演算子をTC39に提唱する際に行っているすべての作業に対して、 Ryan Cavanaugh に大いに感謝します!

6
protoEvangelion