swc/crates/swc_ecma_parser/tests/tsc/witness.ts

140 lines
2.3 KiB
TypeScript

// Initializers
var varInit = varInit; // any
var pInit: any;
function fn(pInit = pInit) {
var pInit: any;
}
class InitClass {
x = this.x;
fn() {
var y = this.x;
var y: any;
}
}
// Return type
function fnReturn1() {
return fnReturn1();
}
var a: any;
var a = fnReturn1();
function fnReturn2() {
return fnReturn2;
}
var fnr2: () => any = fnReturn2();
// Comma
var co1 = (co1, 3);
var co1: number;
var co2 = (3, 4, co2);
var co2: any;
var co3 = (co1, co2, co3, co1);
var co3: number;
// Assignment
var as1 = (as1 = 2);
var as1: number;
var as2 = (as2 = as2 = 2);
var as2: number;
// Conditional
var cnd1 = cnd1 ? 0 : 1;
var cnd1: number;
var cnd2 = cnd1 ? cnd1 ? '' : "" : '';
var cnd2: string;
// ||
var or1 = or1 || '';
var or1: any;
var or2 = '' || or2;
var or2: any;
var or3 = or3 || or3;
var or3: any;
// &&
var and1 = and1 && '';
var and1: string;
var and2 = '' && and2;
var and2: any;
var and3 = and3 && and3;
var and3: any;
// function call return type
function fnCall() {
return fnCall();
}
var fnCallResult = fnCall();
var fnCallResult: any;
// Call argument
function fnArg1(x: typeof fnArg1, y: number) {
var x: (n: typeof fnArg1, m: number) => void;
fnArg1(fnArg1, 0);
}
function overload1(x: (n: string) => string): string;
function overload1(x: (n: number) => number): number;
function overload1(x: (n: any) => any): any;
function overload1() { return undefined; };
function fnArg2() {
return overload1(fnArg2);
}
var t = fnArg2(); // t: should be 'any', but is 'string'
// New operator
class C {
fn1() {
return new (this.fn1())();
}
fn2() {
return new (this.fn2());
}
fn3() {
var a: new(x) => number;
return new a(this.fn3);
}
}
function fn5() {
var a: new (x) => number;
return new a(fn5);
}
var fn5r = fn5(); // fn5r: should be 'any', but is 'number'
// Property access
var propAcc1 = {
m: propAcc1.m
};
var propAcc1: { m: any; }
// Property access of module member
module M2 {
export var x = M2.x;
var y = x;
var y: any;
}
// Property access of class instance type
class C2 {
n = this.n; // n: any
}
var c2inst = new C2().n;
var c2inst: any;
// Constructor function property access
class C3 {
static q = C3.q;
}
var qq = C3.q;
var qq: any;
// Parentheses - tested a bunch above