Skip to content

Commit 0987ee9

Browse files
authored
Do not erase signatures in getSignatureOfTypeTag (microsoft#43688)
I don't see a reason for it, and it doesn't cause any tests to fail.
1 parent 931b20a commit 0987ee9

File tree

6 files changed

+84
-2
lines changed

6 files changed

+84
-2
lines changed

src/compiler/checker.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -12207,8 +12207,7 @@ namespace ts {
1220712207
// should be attached to a function declaration or expression
1220812208
if (!(isInJSFile(node) && isFunctionLikeDeclaration(node))) return undefined;
1220912209
const typeTag = getJSDocTypeTag(node);
12210-
const signature = typeTag && typeTag.typeExpression && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression));
12211-
return signature && getErasedSignature(signature);
12210+
return typeTag?.typeExpression && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression));
1221212211
}
1221312212

1221412213
function getReturnTypeOfTypeTag(node: SignatureDeclaration | JSDocSignature) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
tests/cases/conformance/jsdoc/typeTagNoErasure.js(7,6): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
2+
3+
4+
==== tests/cases/conformance/jsdoc/typeTagNoErasure.js (1 errors) ====
5+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
6+
7+
/** @type {Test<number>} */
8+
const test = dibbity => dibbity
9+
10+
test(1) // ok, T=1
11+
test('hi') // error, T=number
12+
~~~~
13+
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
14+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [typeTagNoErasure.js]
2+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
3+
4+
/** @type {Test<number>} */
5+
const test = dibbity => dibbity
6+
7+
test(1) // ok, T=1
8+
test('hi') // error, T=number
9+
10+
11+
//// [typeTagNoErasure.js]
12+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
13+
/** @type {Test<number>} */
14+
var test = function (dibbity) { return dibbity; };
15+
test(1); // ok, T=1
16+
test('hi'); // error, T=number
17+
18+
19+
//// [typeTagNoErasure.d.ts]
20+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
21+
/** @type {Test<number>} */
22+
declare const test: Test<number>;
23+
type Test<T> = <T1 extends T>(data: T1) => T1;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
=== tests/cases/conformance/jsdoc/typeTagNoErasure.js ===
2+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
3+
4+
/** @type {Test<number>} */
5+
const test = dibbity => dibbity
6+
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
7+
>dibbity : Symbol(dibbity, Decl(typeTagNoErasure.js, 3, 12))
8+
>dibbity : Symbol(dibbity, Decl(typeTagNoErasure.js, 3, 12))
9+
10+
test(1) // ok, T=1
11+
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
12+
13+
test('hi') // error, T=number
14+
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
15+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
=== tests/cases/conformance/jsdoc/typeTagNoErasure.js ===
2+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
3+
4+
/** @type {Test<number>} */
5+
const test = dibbity => dibbity
6+
>test : Test<number>
7+
>dibbity => dibbity : <T1 extends number>(dibbity: T1) => T1
8+
>dibbity : T1
9+
>dibbity : T1
10+
11+
test(1) // ok, T=1
12+
>test(1) : 1
13+
>test : Test<number>
14+
>1 : 1
15+
16+
test('hi') // error, T=number
17+
>test('hi') : number
18+
>test : Test<number>
19+
>'hi' : "hi"
20+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @checkJs:true
2+
// @declaration: true
3+
// @outdir: out/
4+
// @filename: typeTagNoErasure.js
5+
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
6+
7+
/** @type {Test<number>} */
8+
const test = dibbity => dibbity
9+
10+
test(1) // ok, T=1
11+
test('hi') // error, T=number

0 commit comments

Comments
 (0)