mirror of
https://github.com/swc-project/swc.git
synced 2024-12-27 15:42:51 +03:00
140 lines
2.3 KiB
TypeScript
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
|
|
|
|
|