1
のは、私はこのようなコードがあるとしましょう:活字体strictNullChecksとクロージャ
function f(x: string | undefined) {
if (x) {
console.log(x);
Promise.resolve()
.then(() => g(x)) // error, x is string | undefined
}
// x = undefined;
}
function g(y: string) {
}
型ガードとしてif (x)
行為、そうx
console.log
でstring
を入力しています。しかし、.then
のクロージャから参照される場合、そのタイプはstring | undefined
です。 .then
のコードが実行される前に、型ガードの外側で値が未定義に戻ってしまう可能性があるからです。しかし、もしそれが再び設定されなければ、Typescriptはそれを検出させるような種類の分析をしてはならない。
x
の!
演算子を使用して回避することができます。しかし、私はコードベースでこの種のことをしばしば行い、xを未定義にすることで後で壊れることから保護しません。
他の方法がありますか?問題を正しく理解していますか?
私はあなたがこれらのいずれかを行うことができると思います
1 - グッド実際には、const参照を持っているわけではありません。新しい参照があり、 'string'と入力するだけです。だから、 'let'と' var'も動作します。しかし、いくつかの混乱につながる。 2 - 確かに、私は思っているシナリオでそれをすることはできません。そうでなければ私は既に:) –
ええ、あなたはconst部分について正しいと思いますが、私は関数のparamに入れようとしましたが、許可されていないので、varに変更することなく関数の本体にコピーしました/ let。 –