--strictNullChecks
を有効にすると、tscは別の関数でチェックが行われるとオプションのプロパティが未定義でないと推測できないようです。 (私はこれを明確に表現するのに問題があるので、例を見てください)。Typescript strictNullChecks関数間でのチェック
//compiles
function doStuff(foo: Foo) {
if (foo.bar === undefined) {
throw new Error("foo.bar must be defined");
}
foo.bar.baz;
}
をそしてTSCはfoo.barを未定義にすることができると考えているので、このコードにはない:
//does not compile, foo.bar can be undefined
function doStuff2(foo: Foo) {
validateFoo(foo);
foo.bar.baz;
}
function validateFoo(foo: Foo) {
if (foo.bar === undefined) {
throw new Error("foo.bar must be defined");
}
}
次のコードはコンパイル
interface Foo {
bar?: {
baz: string;
};
}
のようなオプションのプロパティとのインタフェースを考えると
これはなぜですか?定義されていないヌルをチェックできるものとして関数をマークする方法はありますか?可能であればfoo.bar!.baz
を避けたいです。この例では、if/throwをインライン化するのは簡単ですが、Fooに複数のオプションのプロパティがある場合、複数の関数でチェックする必要があります。
は、ここでは私のために働いているようだ - – gkb
@gkbはjsfiddleに指定する方法がありますhttps://jsfiddle.net/of5ja33v/いますtscのバージョンが使用され、コンパイラフラグも使用されますか? strictNullChecksはデフォルトではfalseで、typescript 2.0+の場合のみです – martiansnoop
申し訳ありませんが、tSc <2.0+の場合strictNullChecksで完全に逃しました。 – gkb