propagationOfPromiseInitialization.ts(6,1): error TS2454: Variable 'foo' is used before being assigned.


==== propagationOfPromiseInitialization.ts (1 errors) ====
    interface IPromise<T> {
        then<TResult>(successCallback: (promiseValue: T) => TResult, errorCallback?: (reason: any) => TResult): IPromise<TResult>;
    }
    
    var foo: IPromise<number>;
    foo.then((x) => {
    ~~~
!!! error TS2454: Variable 'foo' is used before being assigned.
        // x is inferred to be a number
        return "asdf";
    }).then((x) => {
        // x is inferred to be string
        x.length;
        return 123;
    });
    