1

我是 TypeScript 的新手,但我看到了看似不一致的行为:我可以将 null 作为三元赋值的一部分分配给接口,但通过 if/else 流执行此操作时出现错误(请参见下文)。

该项目设置为强制执行 strictNullChecks,因此我预计两种方法都会出现错误 2322。

我错过了什么?

'use strict';

//NOTE: The following is set in tsconfig.json:
//      "strictNullChecks": true

const CONDITIONALLY_ASSIGNED:any = 0;

interface IFoo {
    unused: string;
}

export class Bar {
    _testFlow:IFoo;
    _testTernary:IFoo;

    constructor() {
        const FORK:boolean = Math.random() < 0.5;

        this._testTernary = FORK ? CONDITIONALLY_ASSIGNED : null; // no error; why not?

        if (FORK) {
            this._testFlow = CONDITIONALLY_ASSIGNED;
            return;
        }

        this._testFlow = null; // ERROR: "Type 'null' is not assignable to type 'IFoo'.ts(2322)"
    }
}
4

0 回答 0