mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-14 02:15:12 -06:00
Contextually type parenthesized expressions.
This commit is contained in:
parent
cd246992ed
commit
22174a17c6
@ -3337,6 +3337,8 @@ module ts {
|
||||
case SyntaxKind.MethodDeclaration:
|
||||
case SyntaxKind.MethodSignature:
|
||||
return isContextSensitiveFunctionLikeDeclaration(<MethodDeclaration>node);
|
||||
case SyntaxKind.ParenthesizedExpression:
|
||||
return isContextSensitive((<ParenthesizedExpression>node).expression);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -5226,6 +5228,8 @@ module ts {
|
||||
case SyntaxKind.TemplateSpan:
|
||||
Debug.assert(parent.parent.kind === SyntaxKind.TemplateExpression);
|
||||
return getContextualTypeForSubstitutionExpression(<TemplateExpression>parent.parent, node);
|
||||
case SyntaxKind.ParenthesizedExpression:
|
||||
return getContextualType(<ParenthesizedExpression>parent);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@ -65,8 +65,8 @@ var p_cast = <Point> ({
|
||||
>p_cast : Point
|
||||
><Point> ({ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }}) : Point
|
||||
>Point : Point
|
||||
>({ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }}) : { x: number; y: number; add: (dx: any, dy: any) => Point; mult: (p: any) => any; }
|
||||
>{ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }} : { x: number; y: number; add: (dx: any, dy: any) => Point; mult: (p: any) => any; }
|
||||
>({ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }}) : { x: number; y: number; add: (dx: number, dy: number) => Point; mult: (p: Point) => Point; }
|
||||
>{ x: 0, y: 0, add: function(dx, dy) { return new Point(this.x + dx, this.y + dy); }, mult: function(p) { return p; }} : { x: number; y: number; add: (dx: number, dy: number) => Point; mult: (p: Point) => Point; }
|
||||
|
||||
x: 0,
|
||||
>x : number
|
||||
@ -75,10 +75,10 @@ var p_cast = <Point> ({
|
||||
>y : number
|
||||
|
||||
add: function(dx, dy) {
|
||||
>add : (dx: any, dy: any) => Point
|
||||
>function(dx, dy) { return new Point(this.x + dx, this.y + dy); } : (dx: any, dy: any) => Point
|
||||
>dx : any
|
||||
>dy : any
|
||||
>add : (dx: number, dy: number) => Point
|
||||
>function(dx, dy) { return new Point(this.x + dx, this.y + dy); } : (dx: number, dy: number) => Point
|
||||
>dx : number
|
||||
>dy : number
|
||||
|
||||
return new Point(this.x + dx, this.y + dy);
|
||||
>new Point(this.x + dx, this.y + dy) : Point
|
||||
@ -87,19 +87,19 @@ var p_cast = <Point> ({
|
||||
>this.x : any
|
||||
>this : any
|
||||
>x : any
|
||||
>dx : any
|
||||
>dx : number
|
||||
>this.y + dy : any
|
||||
>this.y : any
|
||||
>this : any
|
||||
>y : any
|
||||
>dy : any
|
||||
>dy : number
|
||||
|
||||
},
|
||||
mult: function(p) { return p; }
|
||||
>mult : (p: any) => any
|
||||
>function(p) { return p; } : (p: any) => any
|
||||
>p : any
|
||||
>p : any
|
||||
>mult : (p: Point) => Point
|
||||
>function(p) { return p; } : (p: Point) => Point
|
||||
>p : Point
|
||||
>p : Point
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -1,9 +1,17 @@
|
||||
tests/cases/compiler/contextualTypingWithFixedTypeParameters1.ts(2,22): error TS2339: Property 'foo' does not exist on type 'string'.
|
||||
tests/cases/compiler/contextualTypingWithFixedTypeParameters1.ts(3,10): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly.
|
||||
Type argument candidate 'string' is not a valid type argument because it is not a supertype of candidate 'T'.
|
||||
tests/cases/compiler/contextualTypingWithFixedTypeParameters1.ts(3,32): error TS2339: Property 'foo' does not exist on type 'T'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/contextualTypingWithFixedTypeParameters1.ts (1 errors) ====
|
||||
==== tests/cases/compiler/contextualTypingWithFixedTypeParameters1.ts (3 errors) ====
|
||||
var f10: <T>(x: T, b: () => (a: T) => void, y: T) => T;
|
||||
f10('', () => a => a.foo, ''); // a is string
|
||||
~~~
|
||||
!!! error TS2339: Property 'foo' does not exist on type 'string'.
|
||||
var r9 = f10('', () => (a => a.foo), 1); // error
|
||||
var r9 = f10('', () => (a => a.foo), 1); // error
|
||||
~~~
|
||||
!!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly.
|
||||
!!! error TS2453: Type argument candidate 'string' is not a valid type argument because it is not a supertype of candidate 'T'.
|
||||
~~~
|
||||
!!! error TS2339: Property 'foo' does not exist on type 'T'.
|
||||
@ -11,14 +11,14 @@ var a: (a: string) => string;
|
||||
|
||||
// bug 786110
|
||||
var r = a || ((a) => a.toLowerCase());
|
||||
>r : (a: any) => any
|
||||
>a || ((a) => a.toLowerCase()) : (a: any) => any
|
||||
>r : (a: string) => string
|
||||
>a || ((a) => a.toLowerCase()) : (a: string) => string
|
||||
>a : (a: string) => string
|
||||
>((a) => a.toLowerCase()) : (a: any) => any
|
||||
>(a) => a.toLowerCase() : (a: any) => any
|
||||
>a : any
|
||||
>a.toLowerCase() : any
|
||||
>a.toLowerCase : any
|
||||
>a : any
|
||||
>toLowerCase : any
|
||||
>((a) => a.toLowerCase()) : (a: string) => string
|
||||
>(a) => a.toLowerCase() : (a: string) => string
|
||||
>a : string
|
||||
>a.toLowerCase() : string
|
||||
>a.toLowerCase : () => string
|
||||
>a : string
|
||||
>toLowerCase : () => string
|
||||
|
||||
|
||||
@ -52,34 +52,34 @@ var a = fun(x => x, 10);
|
||||
>x : number
|
||||
|
||||
var b = fun((x => x), 10);
|
||||
>b : any
|
||||
>fun((x => x), 10) : any
|
||||
>b : number
|
||||
>fun((x => x), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var c = fun(((x => x)), 10);
|
||||
>c : any
|
||||
>fun(((x => x)), 10) : any
|
||||
>c : number
|
||||
>fun(((x => x)), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var d = fun((((x => x))), 10);
|
||||
>d : any
|
||||
>fun((((x => x))), 10) : any
|
||||
>d : number
|
||||
>fun((((x => x))), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(((x => x))) : (x: any) => any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(((x => x))) : (x: number) => number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var e = fun(x => x, x => x, 10);
|
||||
>e : number
|
||||
@ -93,106 +93,106 @@ var e = fun(x => x, x => x, 10);
|
||||
>x : number
|
||||
|
||||
var f = fun((x => x), (x => x), 10);
|
||||
>f : any
|
||||
>fun((x => x), (x => x), 10) : any
|
||||
>f : number
|
||||
>fun((x => x), (x => x), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var g = fun(((x => x)), ((x => x)), 10);
|
||||
>g : any
|
||||
>fun(((x => x)), ((x => x)), 10) : any
|
||||
>g : number
|
||||
>fun(((x => x)), ((x => x)), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var h = fun((((x => x))), ((x => x)), 10);
|
||||
>h : any
|
||||
>fun((((x => x))), ((x => x)), 10) : any
|
||||
>h : number
|
||||
>fun((((x => x))), ((x => x)), 10) : number
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(((x => x))) : (x: any) => any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(((x => x))) : (x: number) => number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
// Ternaries in parens
|
||||
var i = fun((Math.random() < 0.5 ? x => x : x => undefined), 10);
|
||||
>i : any
|
||||
>fun((Math.random() < 0.5 ? x => x : x => undefined), 10) : any
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? x => x : x => undefined) : (x: any) => any
|
||||
>Math.random() < 0.5 ? x => x : x => undefined : (x: any) => any
|
||||
>(Math.random() < 0.5 ? x => x : x => undefined) : (x: number) => any
|
||||
>Math.random() < 0.5 ? x => x : x => undefined : (x: number) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>x => undefined : (x: any) => any
|
||||
>x : any
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>x => undefined : (x: number) => any
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
|
||||
var j = fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), 10);
|
||||
>j : any
|
||||
>fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), 10) : any
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? (x => x) : (x => undefined)) : (x: any) => any
|
||||
>Math.random() < 0.5 ? (x => x) : (x => undefined) : (x: any) => any
|
||||
>(Math.random() < 0.5 ? (x => x) : (x => undefined)) : (x: number) => any
|
||||
>Math.random() < 0.5 ? (x => x) : (x => undefined) : (x: number) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => undefined) : (x: any) => any
|
||||
>x => undefined : (x: any) => any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>(x => undefined) : (x: number) => any
|
||||
>x => undefined : (x: number) => any
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
|
||||
var k = fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), x => x, 10);
|
||||
>k : any
|
||||
>fun((Math.random() < 0.5 ? (x => x) : (x => undefined)), x => x, 10) : any
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? (x => x) : (x => undefined)) : (x: any) => any
|
||||
>Math.random() < 0.5 ? (x => x) : (x => undefined) : (x: any) => any
|
||||
>(Math.random() < 0.5 ? (x => x) : (x => undefined)) : (x: number) => any
|
||||
>Math.random() < 0.5 ? (x => x) : (x => undefined) : (x: number) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => undefined) : (x: any) => any
|
||||
>x => undefined : (x: any) => any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>(x => undefined) : (x: number) => any
|
||||
>x => undefined : (x: number) => any
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
@ -202,29 +202,29 @@ var l = fun(((Math.random() < 0.5 ? ((x => x)) : ((x => undefined)))), ((x => x)
|
||||
>l : any
|
||||
>fun(((Math.random() < 0.5 ? ((x => x)) : ((x => undefined)))), ((x => x)), 10) : any
|
||||
>fun : { <T>(g: (x: T) => T, x: T): T; <T>(g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>((Math.random() < 0.5 ? ((x => x)) : ((x => undefined)))) : (x: any) => any
|
||||
>(Math.random() < 0.5 ? ((x => x)) : ((x => undefined))) : (x: any) => any
|
||||
>Math.random() < 0.5 ? ((x => x)) : ((x => undefined)) : (x: any) => any
|
||||
>((Math.random() < 0.5 ? ((x => x)) : ((x => undefined)))) : (x: number) => any
|
||||
>(Math.random() < 0.5 ? ((x => x)) : ((x => undefined))) : (x: number) => any
|
||||
>Math.random() < 0.5 ? ((x => x)) : ((x => undefined)) : (x: number) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => undefined)) : (x: any) => any
|
||||
>(x => undefined) : (x: any) => any
|
||||
>x => undefined : (x: any) => any
|
||||
>x : any
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>((x => undefined)) : (x: number) => any
|
||||
>(x => undefined) : (x: number) => any
|
||||
>x => undefined : (x: number) => any
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var lambda1: (x: number) => number = x => x;
|
||||
>lambda1 : (x: number) => number
|
||||
@ -236,10 +236,10 @@ var lambda1: (x: number) => number = x => x;
|
||||
var lambda2: (x: number) => number = (x => x);
|
||||
>lambda2 : (x: number) => number
|
||||
>x : number
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
type ObjType = { x: (p: number) => string; y: (p: string) => number };
|
||||
>ObjType : { x: (p: number) => string; y: (p: string) => number; }
|
||||
@ -270,20 +270,20 @@ var obj1: ObjType = { x: x => (x, undefined), y: y => (y, undefined) };
|
||||
var obj2: ObjType = ({ x: x => (x, undefined), y: y => (y, undefined) });
|
||||
>obj2 : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>ObjType : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>({ x: x => (x, undefined), y: y => (y, undefined) }) : { x: (x: any) => any; y: (y: any) => any; }
|
||||
>{ x: x => (x, undefined), y: y => (y, undefined) } : { x: (x: any) => any; y: (y: any) => any; }
|
||||
>x : (x: any) => any
|
||||
>x => (x, undefined) : (x: any) => any
|
||||
>x : any
|
||||
>({ x: x => (x, undefined), y: y => (y, undefined) }) : { x: (x: number) => any; y: (y: string) => any; }
|
||||
>{ x: x => (x, undefined), y: y => (y, undefined) } : { x: (x: number) => any; y: (y: string) => any; }
|
||||
>x : (x: number) => any
|
||||
>x => (x, undefined) : (x: number) => any
|
||||
>x : number
|
||||
>(x, undefined) : undefined
|
||||
>x, undefined : undefined
|
||||
>x : any
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
>y : (y: any) => any
|
||||
>y => (y, undefined) : (y: any) => any
|
||||
>y : any
|
||||
>y : (y: string) => any
|
||||
>y => (y, undefined) : (y: string) => any
|
||||
>y : string
|
||||
>(y, undefined) : undefined
|
||||
>y, undefined : undefined
|
||||
>y : any
|
||||
>y : string
|
||||
>undefined : undefined
|
||||
|
||||
|
||||
@ -1,84 +0,0 @@
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(16,21): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(17,22): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(18,23): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(21,21): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(21,64): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(22,22): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(22,67): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(23,23): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(23,69): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(26,43): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(27,44): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(28,44): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(29,46): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(29,114): error TS2347: Untyped function calls may not accept type arguments.
|
||||
tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts(32,33): error TS2347: Untyped function calls may not accept type arguments.
|
||||
|
||||
|
||||
==== tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts (15 errors) ====
|
||||
// These tests ensure that in cases where it may *appear* that a value has a type,
|
||||
// they actually are properly being contextually typed. The way we test this is
|
||||
// that we invoke contextually typed arguments with type arguments.
|
||||
// Since 'any' cannot be invoked with type arguments, we should get errors
|
||||
// back if contextual typing is not taking effect.
|
||||
|
||||
type FuncType = (x: <T>(p: T) => T) => typeof x;
|
||||
|
||||
function fun<T>(f: FuncType, x: T): T;
|
||||
function fun<T>(f: FuncType, g: FuncType, x: T): T;
|
||||
function fun<T>(...rest: any[]): T {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var a = fun(x => { x<number>(undefined); return x; }, 10);
|
||||
var b = fun((x => { x<number>(undefined); return x; }), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var c = fun(((x => { x<number>(undefined); return x; })), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var d = fun((((x => { x<number>(undefined); return x; }))), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
|
||||
var e = fun(x => { x<number>(undefined); return x; }, x => { x<number>(undefined); return x; }, 10);
|
||||
var f = fun((x => { x<number>(undefined); return x; }),(x => { x<number>(undefined); return x; }), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var g = fun(((x => { x<number>(undefined); return x; })),((x => { x<number>(undefined); return x; })), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var h = fun((((x => { x<number>(undefined); return x; }))),((x => { x<number>(undefined); return x; })), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
|
||||
// Ternaries in parens
|
||||
var i = fun((Math.random() < 0.5 ? x => { x<number>(undefined); return x; } : x => undefined), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var j = fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var k = fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), x => { x<number>(undefined); return x; }, 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
var l = fun(((Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined)))),((x => { x<number>(undefined); return x; })), 10);
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
|
||||
var lambda1: FuncType = x => { x<number>(undefined); return x; };
|
||||
var lambda2: FuncType = (x => { x<number>(undefined); return x; });
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2347: Untyped function calls may not accept type arguments.
|
||||
|
||||
type ObjType = { x: (p: number) => string; y: (p: string) => number };
|
||||
var obj1: ObjType = { x: x => (x, undefined), y: y => (y, undefined) };
|
||||
var obj2: ObjType = ({ x: x => (x, undefined), y: y => (y, undefined) });
|
||||
350
tests/baselines/reference/parenthesizedContexualTyping2.types
Normal file
350
tests/baselines/reference/parenthesizedContexualTyping2.types
Normal file
@ -0,0 +1,350 @@
|
||||
=== tests/cases/conformance/expressions/contextualTyping/parenthesizedContexualTyping2.ts ===
|
||||
// These tests ensure that in cases where it may *appear* that a value has a type,
|
||||
// they actually are properly being contextually typed. The way we test this is
|
||||
// that we invoke contextually typed arguments with type arguments.
|
||||
// Since 'any' cannot be invoked with type arguments, we should get errors
|
||||
// back if contextual typing is not taking effect.
|
||||
|
||||
type FuncType = (x: <T>(p: T) => T) => typeof x;
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>T : T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
function fun<T>(f: FuncType, x: T): T;
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>T : T
|
||||
>f : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
function fun<T>(f: FuncType, g: FuncType, x: T): T;
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>T : T
|
||||
>f : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>g : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
function fun<T>(...rest: any[]): T {
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>T : T
|
||||
>rest : any[]
|
||||
>T : T
|
||||
|
||||
return undefined;
|
||||
>undefined : undefined
|
||||
}
|
||||
|
||||
var a = fun(x => { x<number>(undefined); return x; }, 10);
|
||||
>a : number
|
||||
>fun(x => { x<number>(undefined); return x; }, 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var b = fun((x => { x<number>(undefined); return x; }), 10);
|
||||
>b : number
|
||||
>fun((x => { x<number>(undefined); return x; }), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var c = fun(((x => { x<number>(undefined); return x; })), 10);
|
||||
>c : number
|
||||
>fun(((x => { x<number>(undefined); return x; })), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var d = fun((((x => { x<number>(undefined); return x; }))), 10);
|
||||
>d : number
|
||||
>fun((((x => { x<number>(undefined); return x; }))), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(((x => { x<number>(undefined); return x; }))) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var e = fun(x => { x<number>(undefined); return x; }, x => { x<number>(undefined); return x; }, 10);
|
||||
>e : number
|
||||
>fun(x => { x<number>(undefined); return x; }, x => { x<number>(undefined); return x; }, 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var f = fun((x => { x<number>(undefined); return x; }),(x => { x<number>(undefined); return x; }), 10);
|
||||
>f : number
|
||||
>fun((x => { x<number>(undefined); return x; }),(x => { x<number>(undefined); return x; }), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var g = fun(((x => { x<number>(undefined); return x; })),((x => { x<number>(undefined); return x; })), 10);
|
||||
>g : number
|
||||
>fun(((x => { x<number>(undefined); return x; })),((x => { x<number>(undefined); return x; })), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var h = fun((((x => { x<number>(undefined); return x; }))),((x => { x<number>(undefined); return x; })), 10);
|
||||
>h : number
|
||||
>fun((((x => { x<number>(undefined); return x; }))),((x => { x<number>(undefined); return x; })), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(((x => { x<number>(undefined); return x; }))) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
// Ternaries in parens
|
||||
var i = fun((Math.random() < 0.5 ? x => { x<number>(undefined); return x; } : x => undefined), 10);
|
||||
>i : number
|
||||
>fun((Math.random() < 0.5 ? x => { x<number>(undefined); return x; } : x => undefined), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? x => { x<number>(undefined); return x; } : x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 ? x => { x<number>(undefined); return x; } : x => undefined : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>x => undefined : (x: <T>(p: T) => T) => any
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
|
||||
var j = fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), 10);
|
||||
>j : number
|
||||
>fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>(x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>x => undefined : (x: <T>(p: T) => T) => any
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
|
||||
var k = fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), x => { x<number>(undefined); return x; }, 10);
|
||||
>k : number
|
||||
>fun((Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)), x => { x<number>(undefined); return x; }, 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>(Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined)) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 ? (x => { x<number>(undefined); return x; }) : (x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>(x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>x => undefined : (x: <T>(p: T) => T) => any
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var l = fun(((Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined)))),((x => { x<number>(undefined); return x; })), 10);
|
||||
>l : number
|
||||
>fun(((Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined)))),((x => { x<number>(undefined); return x; })), 10) : number
|
||||
>fun : { <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; <T>(f: (x: <T>(p: T) => T) => <T>(p: T) => T, g: (x: <T>(p: T) => T) => <T>(p: T) => T, x: T): T; }
|
||||
>((Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined)))) : (x: <T>(p: T) => T) => any
|
||||
>(Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined))) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 ? ((x => { x<number>(undefined); return x; })) : ((x => undefined)) : (x: <T>(p: T) => T) => any
|
||||
>Math.random() < 0.5 : boolean
|
||||
>Math.random() : number
|
||||
>Math.random : () => number
|
||||
>Math : Math
|
||||
>random : () => number
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
>((x => undefined)) : (x: <T>(p: T) => T) => any
|
||||
>(x => undefined) : (x: <T>(p: T) => T) => any
|
||||
>x => undefined : (x: <T>(p: T) => T) => any
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>((x => { x<number>(undefined); return x; })) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var lambda1: FuncType = x => { x<number>(undefined); return x; };
|
||||
>lambda1 : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
var lambda2: FuncType = (x => { x<number>(undefined); return x; });
|
||||
>lambda2 : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>FuncType : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>(x => { x<number>(undefined); return x; }) : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x => { x<number>(undefined); return x; } : (x: <T>(p: T) => T) => <T>(p: T) => T
|
||||
>x : <T>(p: T) => T
|
||||
>x<number>(undefined) : number
|
||||
>x : <T>(p: T) => T
|
||||
>undefined : undefined
|
||||
>x : <T>(p: T) => T
|
||||
|
||||
type ObjType = { x: (p: number) => string; y: (p: string) => number };
|
||||
>ObjType : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>x : (p: number) => string
|
||||
>p : number
|
||||
>y : (p: string) => number
|
||||
>p : string
|
||||
|
||||
var obj1: ObjType = { x: x => (x, undefined), y: y => (y, undefined) };
|
||||
>obj1 : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>ObjType : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>{ x: x => (x, undefined), y: y => (y, undefined) } : { x: (x: number) => any; y: (y: string) => any; }
|
||||
>x : (x: number) => any
|
||||
>x => (x, undefined) : (x: number) => any
|
||||
>x : number
|
||||
>(x, undefined) : undefined
|
||||
>x, undefined : undefined
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
>y : (y: string) => any
|
||||
>y => (y, undefined) : (y: string) => any
|
||||
>y : string
|
||||
>(y, undefined) : undefined
|
||||
>y, undefined : undefined
|
||||
>y : string
|
||||
>undefined : undefined
|
||||
|
||||
var obj2: ObjType = ({ x: x => (x, undefined), y: y => (y, undefined) });
|
||||
>obj2 : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>ObjType : { x: (p: number) => string; y: (p: string) => number; }
|
||||
>({ x: x => (x, undefined), y: y => (y, undefined) }) : { x: (x: number) => any; y: (y: string) => any; }
|
||||
>{ x: x => (x, undefined), y: y => (y, undefined) } : { x: (x: number) => any; y: (y: string) => any; }
|
||||
>x : (x: number) => any
|
||||
>x => (x, undefined) : (x: number) => any
|
||||
>x : number
|
||||
>(x, undefined) : undefined
|
||||
>x, undefined : undefined
|
||||
>x : number
|
||||
>undefined : undefined
|
||||
>y : (y: string) => any
|
||||
>y => (y, undefined) : (y: string) => any
|
||||
>y : string
|
||||
>(y, undefined) : undefined
|
||||
>y, undefined : undefined
|
||||
>y : string
|
||||
>undefined : undefined
|
||||
|
||||
@ -62,21 +62,21 @@ var a = tempFun `${ x => x } ${ 10 }`
|
||||
>x : number
|
||||
|
||||
var b = tempFun `${ (x => x) } ${ 10 }`
|
||||
>b : any
|
||||
>b : number
|
||||
>tempFun : { <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var c = tempFun `${ ((x => x)) } ${ 10 }`
|
||||
>c : any
|
||||
>c : number
|
||||
>tempFun : { <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var d = tempFun `${ x => x } ${ x => x } ${ 10 }`
|
||||
>d : number
|
||||
@ -89,41 +89,41 @@ var d = tempFun `${ x => x } ${ x => x } ${ 10 }`
|
||||
>x : number
|
||||
|
||||
var e = tempFun `${ x => x } ${ (x => x) } ${ 10 }`
|
||||
>e : any
|
||||
>e : number
|
||||
>tempFun : { <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var f = tempFun `${ x => x } ${ ((x => x)) } ${ 10 }`
|
||||
>f : any
|
||||
>f : number
|
||||
>tempFun : { <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var g = tempFun `${ (x => x) } ${ (((x => x))) } ${ 10 }`
|
||||
>g : any
|
||||
>g : number
|
||||
>tempFun : { <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; <T>(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; }
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(((x => x))) : (x: any) => any
|
||||
>((x => x)) : (x: any) => any
|
||||
>(x => x) : (x: any) => any
|
||||
>x => x : (x: any) => any
|
||||
>x : any
|
||||
>x : any
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
>(((x => x))) : (x: number) => number
|
||||
>((x => x)) : (x: number) => number
|
||||
>(x => x) : (x: number) => number
|
||||
>x => x : (x: number) => number
|
||||
>x : number
|
||||
>x : number
|
||||
|
||||
var h = tempFun `${ (x => x) } ${ (((x => x))) } ${ undefined }`
|
||||
>h : any
|
||||
|
||||
@ -6,4 +6,4 @@
|
||||
edit.insert('');
|
||||
|
||||
goTo.marker();
|
||||
verify.quickInfoIs('(parameter) bb: any');
|
||||
verify.quickInfoIs('(parameter) bb: number');
|
||||
@ -212,9 +212,9 @@ verify.quickInfoIs("(parameter) i: number");
|
||||
goTo.marker('7');
|
||||
verify.quickInfoIs("(var) c3t1: (s: string) => string");
|
||||
goTo.marker('8');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('9');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('10');
|
||||
verify.quickInfoIs("(var) c3t2: IFoo");
|
||||
goTo.marker('11');
|
||||
@ -254,11 +254,11 @@ verify.quickInfoIs("(property) foo: IFoo");
|
||||
goTo.marker('29');
|
||||
verify.quickInfoIs("(var) c3t13: IFoo");
|
||||
goTo.marker('30');
|
||||
verify.quickInfoIs("(property) f: (i: any, s: any) => any");
|
||||
verify.quickInfoIs("(property) f: (i: number, s: string) => string");
|
||||
goTo.marker('31');
|
||||
verify.quickInfoIs("(parameter) i: any");
|
||||
verify.quickInfoIs("(parameter) i: number");
|
||||
goTo.marker('32');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('33');
|
||||
verify.quickInfoIs("(var) c3t14: IFoo");
|
||||
goTo.marker('34');
|
||||
@ -286,7 +286,7 @@ verify.quickInfoIs("(var) c7t2: IFoo[]");
|
||||
goTo.marker('45');
|
||||
verify.quickInfoIs("(property) t1: (s: string) => string");
|
||||
goTo.marker('46');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('47');
|
||||
verify.quickInfoIs("(property) t2: IFoo");
|
||||
goTo.marker('48');
|
||||
@ -326,11 +326,11 @@ verify.quickInfoIs("(property) foo: IFoo");
|
||||
goTo.marker('65');
|
||||
verify.quickInfoIs("(property) t13: IFoo");
|
||||
goTo.marker('66');
|
||||
verify.quickInfoIs("(property) f: (i: any, s: any) => any");
|
||||
verify.quickInfoIs("(property) f: (i: number, s: string) => string");
|
||||
goTo.marker('67');
|
||||
verify.quickInfoIs("(parameter) i: any");
|
||||
verify.quickInfoIs("(parameter) i: number");
|
||||
goTo.marker('68');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('69');
|
||||
verify.quickInfoIs("(property) t14: IFoo");
|
||||
goTo.marker('70');
|
||||
@ -346,7 +346,7 @@ verify.quickInfoIs("(parameter) n: number");
|
||||
goTo.marker('75');
|
||||
verify.quickInfoIs("(var) c12t1: (s: string) => string");
|
||||
goTo.marker('76');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('77');
|
||||
verify.quickInfoIs("(var) c12t2: IFoo");
|
||||
goTo.marker('78');
|
||||
@ -386,11 +386,11 @@ verify.quickInfoIs("(property) foo: IFoo");
|
||||
goTo.marker('95');
|
||||
verify.quickInfoIs("(var) c12t13: IFoo");
|
||||
goTo.marker('96');
|
||||
verify.quickInfoIs("(property) f: (i: any, s: any) => any");
|
||||
verify.quickInfoIs("(property) f: (i: number, s: string) => string");
|
||||
goTo.marker('97');
|
||||
verify.quickInfoIs("(parameter) i: any");
|
||||
verify.quickInfoIs("(parameter) i: number");
|
||||
goTo.marker('98');
|
||||
verify.quickInfoIs("(parameter) s: any");
|
||||
verify.quickInfoIs("(parameter) s: string");
|
||||
goTo.marker('99');
|
||||
verify.quickInfoIs("(var) c12t14: IFoo");
|
||||
goTo.marker('100');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user