microsoft / TypeScript-Handbook

Deprecated, please use the TypeScript-Website repo instead
https://github.com/microsoft/TypeScript-Website
Apache License 2.0
4.88k stars 1.13k forks source link

Example doesn't work #1263

Open sv158 opened 4 years ago

sv158 commented 4 years ago

https://github.com/microsoft/TypeScript-Handbook/blame/master/pages/Advanced%20Types.md#L500

type LinkedList<T> = T & { next: LinkedList<T> };

interface Person {
    name: string;
}

var people: LinkedList<Person>;
var s = people.name;  
var s = people.next.name;
var s = people.next.next.name;
var s = people.next.next.next.name;

Variable 'people' is used before being assigned.

orta commented 4 years ago

Looks legit, want to submit a PR making that declare var people?

sv158 commented 4 years ago

@orta while using declare var, the js code generated is different.

There is also a similar problem at https://github.com/microsoft/TypeScript-Handbook/blame/master/pages/Type%20Compatibility.md#L221

interface Empty<T> {
}
let x: Empty<number>;
let y: Empty<string>;
x = y;  // variable 'y' is used before being assigned.

and https://github.com/microsoft/TypeScript-Handbook/blame/master/pages/Type%20Compatibility.md#L200

class Animal {
    feet: number;
    constructor(name: string, numFeet: number) { }
}
class Size {
    feet: number;
    constructor(numFeet: number) { }
}
let a: Animal;
let s: Size;
a = s;  // variable 's' is used before being assigned.
s = a;