mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-17 01:49:41 -05:00
Do not erase signatures in getSignatureOfTypeTag (#43688)
I don't see a reason for it, and it doesn't cause any tests to fail.
This commit is contained in:
committed by
GitHub
parent
931b20af6c
commit
0987ee9e0e
@@ -12207,8 +12207,7 @@ namespace ts {
|
||||
// should be attached to a function declaration or expression
|
||||
if (!(isInJSFile(node) && isFunctionLikeDeclaration(node))) return undefined;
|
||||
const typeTag = getJSDocTypeTag(node);
|
||||
const signature = typeTag && typeTag.typeExpression && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression));
|
||||
return signature && getErasedSignature(signature);
|
||||
return typeTag?.typeExpression && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression));
|
||||
}
|
||||
|
||||
function getReturnTypeOfTypeTag(node: SignatureDeclaration | JSDocSignature) {
|
||||
|
||||
14
tests/baselines/reference/typeTagNoErasure.errors.txt
Normal file
14
tests/baselines/reference/typeTagNoErasure.errors.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
tests/cases/conformance/jsdoc/typeTagNoErasure.js(7,6): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsdoc/typeTagNoErasure.js (1 errors) ====
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
|
||||
/** @type {Test<number>} */
|
||||
const test = dibbity => dibbity
|
||||
|
||||
test(1) // ok, T=1
|
||||
test('hi') // error, T=number
|
||||
~~~~
|
||||
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
|
||||
23
tests/baselines/reference/typeTagNoErasure.js
Normal file
23
tests/baselines/reference/typeTagNoErasure.js
Normal file
@@ -0,0 +1,23 @@
|
||||
//// [typeTagNoErasure.js]
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
|
||||
/** @type {Test<number>} */
|
||||
const test = dibbity => dibbity
|
||||
|
||||
test(1) // ok, T=1
|
||||
test('hi') // error, T=number
|
||||
|
||||
|
||||
//// [typeTagNoErasure.js]
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
/** @type {Test<number>} */
|
||||
var test = function (dibbity) { return dibbity; };
|
||||
test(1); // ok, T=1
|
||||
test('hi'); // error, T=number
|
||||
|
||||
|
||||
//// [typeTagNoErasure.d.ts]
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
/** @type {Test<number>} */
|
||||
declare const test: Test<number>;
|
||||
type Test<T> = <T1 extends T>(data: T1) => T1;
|
||||
15
tests/baselines/reference/typeTagNoErasure.symbols
Normal file
15
tests/baselines/reference/typeTagNoErasure.symbols
Normal file
@@ -0,0 +1,15 @@
|
||||
=== tests/cases/conformance/jsdoc/typeTagNoErasure.js ===
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
|
||||
/** @type {Test<number>} */
|
||||
const test = dibbity => dibbity
|
||||
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
|
||||
>dibbity : Symbol(dibbity, Decl(typeTagNoErasure.js, 3, 12))
|
||||
>dibbity : Symbol(dibbity, Decl(typeTagNoErasure.js, 3, 12))
|
||||
|
||||
test(1) // ok, T=1
|
||||
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
|
||||
|
||||
test('hi') // error, T=number
|
||||
>test : Symbol(test, Decl(typeTagNoErasure.js, 3, 5))
|
||||
|
||||
20
tests/baselines/reference/typeTagNoErasure.types
Normal file
20
tests/baselines/reference/typeTagNoErasure.types
Normal file
@@ -0,0 +1,20 @@
|
||||
=== tests/cases/conformance/jsdoc/typeTagNoErasure.js ===
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
|
||||
/** @type {Test<number>} */
|
||||
const test = dibbity => dibbity
|
||||
>test : Test<number>
|
||||
>dibbity => dibbity : <T1 extends number>(dibbity: T1) => T1
|
||||
>dibbity : T1
|
||||
>dibbity : T1
|
||||
|
||||
test(1) // ok, T=1
|
||||
>test(1) : 1
|
||||
>test : Test<number>
|
||||
>1 : 1
|
||||
|
||||
test('hi') // error, T=number
|
||||
>test('hi') : number
|
||||
>test : Test<number>
|
||||
>'hi' : "hi"
|
||||
|
||||
11
tests/cases/conformance/jsdoc/typeTagNoErasure.ts
Normal file
11
tests/cases/conformance/jsdoc/typeTagNoErasure.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
// @checkJs:true
|
||||
// @declaration: true
|
||||
// @outdir: out/
|
||||
// @filename: typeTagNoErasure.js
|
||||
/** @template T @typedef {<T1 extends T>(data: T1) => T1} Test */
|
||||
|
||||
/** @type {Test<number>} */
|
||||
const test = dibbity => dibbity
|
||||
|
||||
test(1) // ok, T=1
|
||||
test('hi') // error, T=number
|
||||
Reference in New Issue
Block a user