Skip to content

Commit 80a7716

Browse files
committed
PR Feedback
1 parent 6bbacb6 commit 80a7716

File tree

5 files changed

+123
-11
lines changed

5 files changed

+123
-11
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12744,9 +12744,11 @@ namespace ts {
1274412744
if (declaration.type) {
1274512745
return getTypeFromTypeNode(declaration.type);
1274612746
}
12747-
const jsDocType = isInJavaScriptFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
12748-
if (jsDocType) {
12749-
return jsDocType;
12747+
if (isInJavaScriptFile(declaration)) {
12748+
const jsDocType = getTypeForDeclarationFromJSDocComment(declaration);
12749+
if (jsDocType) {
12750+
return jsDocType;
12751+
}
1275012752
}
1275112753
if (declaration.kind === SyntaxKind.Parameter) {
1275212754
const type = getContextuallyTypedParameterType(<ParameterDeclaration>declaration);

src/compiler/utilities.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2625,13 +2625,11 @@ namespace ts {
26252625
if (accessor && accessor.parameters.length > 0) {
26262626
const hasThis = accessor.parameters.length === 2 && parameterIsThisKeyword(accessor.parameters[0]);
26272627
const parameter = accessor.parameters[hasThis ? 1 : 0];
2628-
if (parameter) {
2629-
if (parameter.type) {
2630-
return parameter.type;
2631-
}
2632-
if (includeJSDocType && parameter.flags & NodeFlags.JavaScriptFile) {
2633-
return getJSDocType(parameter);
2634-
}
2628+
if (parameter.type) {
2629+
return parameter.type;
2630+
}
2631+
if (includeJSDocType && parameter.flags & NodeFlags.JavaScriptFile) {
2632+
return getJSDocType(parameter);
26352633
}
26362634
}
26372635
}

tests/baselines/reference/contextualTypeFromJSDoc.symbols

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,39 @@ const arr = [
1010
>y : Symbol(y, Decl(index.js, 3, 11))
1111

1212
];
13+
14+
/** @return {function(): Array<[string, {x?:number, y?:number}]>} */
15+
function f() {
16+
>f : Symbol(f, Decl(index.js, 4, 2))
17+
18+
return [
19+
['a', { x: 1 }],
20+
>x : Symbol(x, Decl(index.js, 9, 15))
21+
22+
['b', { y: 2 }]
23+
>y : Symbol(y, Decl(index.js, 10, 15))
24+
25+
];
26+
}
27+
28+
class C {
29+
>C : Symbol(C, Decl(index.js, 12, 1))
30+
31+
/** @param {function(): Array<[string, {x?:number, y?:number}]>} value */
32+
set x(value) { }
33+
>x : Symbol(C.x, Decl(index.js, 14, 9))
34+
>value : Symbol(value, Decl(index.js, 16, 10))
35+
36+
get () {
37+
>get : Symbol(C.get, Decl(index.js, 16, 20))
38+
39+
return [
40+
['a', { x: 1 }],
41+
>x : Symbol(x, Decl(index.js, 19, 19))
42+
43+
['b', { y: 2 }]
44+
>y : Symbol(y, Decl(index.js, 20, 19))
45+
46+
];
47+
}
48+
}

tests/baselines/reference/contextualTypeFromJSDoc.types

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,59 @@ const arr = [
1919
>2 : 2
2020

2121
];
22+
23+
/** @return {function(): Array<[string, {x?:number, y?:number}]>} */
24+
function f() {
25+
>f : () => () => [string, { x?: number; y?: number; }][]
26+
27+
return [
28+
>[ ['a', { x: 1 }], ['b', { y: 2 }] ] : ((string | { [x: string]: any; x: number; })[] | (string | { [x: string]: any; y: number; })[])[]
29+
30+
['a', { x: 1 }],
31+
>['a', { x: 1 }] : (string | { [x: string]: any; x: number; })[]
32+
>'a' : "a"
33+
>{ x: 1 } : { [x: string]: any; x: number; }
34+
>x : number
35+
>1 : 1
36+
37+
['b', { y: 2 }]
38+
>['b', { y: 2 }] : (string | { [x: string]: any; y: number; })[]
39+
>'b' : "b"
40+
>{ y: 2 } : { [x: string]: any; y: number; }
41+
>y : number
42+
>2 : 2
43+
44+
];
45+
}
46+
47+
class C {
48+
>C : C
49+
50+
/** @param {function(): Array<[string, {x?:number, y?:number}]>} value */
51+
set x(value) { }
52+
>x : any
53+
>value : () => [string, { x?: number; y?: number; }][]
54+
55+
get () {
56+
>get : () => ((string | { [x: string]: any; x: number; })[] | (string | { [x: string]: any; y: number; })[])[]
57+
58+
return [
59+
>[ ['a', { x: 1 }], ['b', { y: 2 }] ] : ((string | { [x: string]: any; x: number; })[] | (string | { [x: string]: any; y: number; })[])[]
60+
61+
['a', { x: 1 }],
62+
>['a', { x: 1 }] : (string | { [x: string]: any; x: number; })[]
63+
>'a' : "a"
64+
>{ x: 1 } : { [x: string]: any; x: number; }
65+
>x : number
66+
>1 : 1
67+
68+
['b', { y: 2 }]
69+
>['b', { y: 2 }] : (string | { [x: string]: any; y: number; })[]
70+
>'b' : "b"
71+
>{ y: 2 } : { [x: string]: any; y: number; }
72+
>y : number
73+
>2 : 2
74+
75+
];
76+
}
77+
}

tests/cases/conformance/types/contextualTypes/jsdoc/contextualTypeFromJSDoc.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,29 @@
22
// @checkJs: true
33
// @noEmit: true
44
// @filename: index.js
5+
// @target: esnext
56

67
/** @type {Array<[string, {x?:number, y?:number}]>} */
78
const arr = [
89
['a', { x: 1 }],
910
['b', { y: 2 }]
10-
];
11+
];
12+
13+
/** @return {function(): Array<[string, {x?:number, y?:number}]>} */
14+
function f() {
15+
return [
16+
['a', { x: 1 }],
17+
['b', { y: 2 }]
18+
];
19+
}
20+
21+
class C {
22+
/** @param {function(): Array<[string, {x?:number, y?:number}]>} value */
23+
set x(value) { }
24+
get () {
25+
return [
26+
['a', { x: 1 }],
27+
['b', { y: 2 }]
28+
];
29+
}
30+
}

0 commit comments

Comments
 (0)