TypeScript/tests/baselines/reference/typeFromJSInitializer.types

266 lines
5.1 KiB
Plaintext

=== tests/cases/conformance/salsa/a.js ===
function A () {
>A : typeof A
// should get any on this-assignments in constructor
this.unknown = null
>this.unknown = null : null
>this.unknown : any
>this : this
>unknown : any
>null : null
this.unknowable = undefined
>this.unknowable = undefined : undefined
>this.unknowable : any
>this : this
>unknowable : any
>undefined : undefined
this.empty = []
>this.empty = [] : never[]
>this.empty : any
>this : this
>empty : any
>[] : never[]
}
var a = new A()
>a : A
>new A() : A
>A : typeof A
a.unknown = 1
>a.unknown = 1 : 1
>a.unknown : any
>a : A
>unknown : any
>1 : 1
a.unknown = true
>a.unknown = true : true
>a.unknown : any
>a : A
>unknown : any
>true : true
a.unknown = {}
>a.unknown = {} : {}
>a.unknown : any
>a : A
>unknown : any
>{} : {}
a.unknown = 'hi'
>a.unknown = 'hi' : "hi"
>a.unknown : any
>a : A
>unknown : any
>'hi' : "hi"
a.unknowable = 1
>a.unknowable = 1 : 1
>a.unknowable : any
>a : A
>unknowable : any
>1 : 1
a.unknowable = true
>a.unknowable = true : true
>a.unknowable : any
>a : A
>unknowable : any
>true : true
a.unknowable = {}
>a.unknowable = {} : {}
>a.unknowable : any
>a : A
>unknowable : any
>{} : {}
a.unknowable = 'hi'
>a.unknowable = 'hi' : "hi"
>a.unknowable : any
>a : A
>unknowable : any
>'hi' : "hi"
a.empty.push(1)
>a.empty.push(1) : number
>a.empty.push : (...items: any[]) => number
>a.empty : any[]
>a : A
>empty : any[]
>push : (...items: any[]) => number
>1 : 1
a.empty.push(true)
>a.empty.push(true) : number
>a.empty.push : (...items: any[]) => number
>a.empty : any[]
>a : A
>empty : any[]
>push : (...items: any[]) => number
>true : true
a.empty.push({})
>a.empty.push({}) : number
>a.empty.push : (...items: any[]) => number
>a.empty : any[]
>a : A
>empty : any[]
>push : (...items: any[]) => number
>{} : {}
a.empty.push('hi')
>a.empty.push('hi') : number
>a.empty.push : (...items: any[]) => number
>a.empty : any[]
>a : A
>empty : any[]
>push : (...items: any[]) => number
>'hi' : "hi"
/** @type {number | undefined} */
var n;
>n : number | undefined
// should get any on parameter initialisers
function f(a = null, b = n, l = []) {
>f : (a?: null, b?: number | undefined, l?: any[]) => void
>a : null
>null : null
>b : number | undefined
>n : number | undefined
>l : any[]
>[] : never[]
// a should be null in strict mode
a = undefined
>a = undefined : undefined
>a : null
>undefined : undefined
a = null
>a = null : null
>a : null
>null : null
a = 1
>a = 1 : 1
>a : null
>1 : 1
a = true
>a = true : true
>a : null
>true : true
a = {}
>a = {} : {}
>a : null
>{} : {}
a = 'ok'
>a = 'ok' : "ok"
>a : null
>'ok' : "ok"
// b should be number | undefined, not any
b = 1
>b = 1 : 1
>b : number | undefined
>1 : 1
b = undefined
>b = undefined : undefined
>b : number | undefined
>undefined : undefined
b = 'error'
>b = 'error' : "error"
>b : number | undefined
>'error' : "error"
// l should be any[]
l.push(1)
>l.push(1) : number
>l.push : (...items: any[]) => number
>l : any[]
>push : (...items: any[]) => number
>1 : 1
l.push('ok')
>l.push('ok') : number
>l.push : (...items: any[]) => number
>l : any[]
>push : (...items: any[]) => number
>'ok' : "ok"
}
// should get any on variable initialisers
var u = undefined;
>u : any
>undefined : undefined
var l = [];
>l : any[]
>[] : never[]
u = undefined
>u = undefined : undefined
>u : any
>undefined : undefined
u = 1
>u = 1 : 1
>u : any
>1 : 1
u = true
>u = true : true
>u : any
>true : true
u = {}
>u = {} : {}
>u : any
>{} : {}
u = 'ok'
>u = 'ok' : "ok"
>u : any
>'ok' : "ok"
l.push('ok')
>l.push('ok') : number
>l.push : (...items: any[]) => number
>l : any[]
>push : (...items: any[]) => number
>'ok' : "ok"
/** @type {(v: unknown) => v is undefined} */
const isUndef = v => v === undefined;
>isUndef : (v: unknown) => v is undefined
>v => v === undefined : (v: unknown) => v is undefined
>v : unknown
>v === undefined : boolean
>v : unknown
>undefined : undefined
const e = [1, undefined];
>e : (number | undefined)[]
>[1, undefined] : (number | undefined)[]
>1 : 1
>undefined : undefined
// should be undefined[]
const g = e.filter(isUndef);
>g : undefined[]
>e.filter(isUndef) : undefined[]
>e.filter : { <S extends number | undefined>(predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => unknown, thisArg?: any): (number | undefined)[]; }
>e : (number | undefined)[]
>filter : { <S extends number | undefined>(predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => unknown, thisArg?: any): (number | undefined)[]; }
>isUndef : (v: unknown) => v is undefined