Merge branch 'master' into report-multiple-overload-errors

This commit is contained in:
Nathan Shively-Sanders
2019-07-03 14:55:06 -07:00
16 changed files with 226 additions and 45 deletions
+3 -1
View File
@@ -19207,7 +19207,9 @@ namespace ts {
}
}
// Result is union of signatures collected (return type is union of return types of this signature set)
return signatureList && createUnionSignature(signatureList[0], signatureList);
if (signatureList) {
return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList);
}
}
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {
+68
View File
@@ -468,6 +468,8 @@ namespace ts {
visitNode(cbNode, (<JSDocPropertyLikeTag>node).typeExpression)
: visitNode(cbNode, (<JSDocPropertyLikeTag>node).typeExpression) ||
visitNode(cbNode, (<JSDocPropertyLikeTag>node).name));
case SyntaxKind.JSDocAuthorTag:
return visitNode(cbNode, (node as JSDocTag).tagName);
case SyntaxKind.JSDocAugmentsTag:
return visitNode(cbNode, (node as JSDocTag).tagName) ||
visitNode(cbNode, (<JSDocAugmentsTag>node).class);
@@ -6621,6 +6623,9 @@ namespace ts {
let tag: JSDocTag | undefined;
switch (tagName.escapedText) {
case "author":
tag = parseAuthorTag(start, tagName, margin);
break;
case "augments":
case "extends":
tag = parseAugmentsTag(start, tagName);
@@ -6900,6 +6905,69 @@ namespace ts {
return finishNode(result);
}
function parseAuthorTag(start: number, tagName: Identifier, indent: number): JSDocAuthorTag {
const result = <JSDocAuthorTag>createNode(SyntaxKind.JSDocAuthorTag, start);
result.tagName = tagName;
const authorInfoWithEmail = tryParse(() => tryParseAuthorNameAndEmail());
if (!authorInfoWithEmail) {
return finishNode(result);
}
result.comment = authorInfoWithEmail;
if (lookAhead(() => nextToken() !== SyntaxKind.NewLineTrivia)) {
const comment = parseTagComments(indent);
if (comment) {
result.comment += comment;
}
}
return finishNode(result);
}
function tryParseAuthorNameAndEmail(): string | undefined {
const comments: string[] = [];
let seenLessThan = false;
let seenGreaterThan = false;
let token = scanner.getToken();
loop: while (true) {
switch (token) {
case SyntaxKind.Identifier:
case SyntaxKind.WhitespaceTrivia:
case SyntaxKind.DotToken:
case SyntaxKind.AtToken:
comments.push(scanner.getTokenText());
break;
case SyntaxKind.LessThanToken:
if (seenLessThan || seenGreaterThan) {
return;
}
seenLessThan = true;
comments.push(scanner.getTokenText());
break;
case SyntaxKind.GreaterThanToken:
if (!seenLessThan || seenGreaterThan) {
return;
}
seenGreaterThan = true;
comments.push(scanner.getTokenText());
scanner.setTextPos(scanner.getTokenPos() + 1);
break loop;
case SyntaxKind.NewLineTrivia:
case SyntaxKind.EndOfFileToken:
break loop;
}
token = nextTokenJSDoc();
}
if (seenLessThan && seenGreaterThan) {
return comments.length === 0 ? undefined : comments.join("");
}
}
function parseAugmentsTag(start: number, tagName: Identifier): JSDocAugmentsTag {
const result = <JSDocAugmentsTag>createNode(SyntaxKind.JSDocAugmentsTag, start);
result.tagName = tagName;
+2
View File
@@ -2086,6 +2086,8 @@ namespace ts {
return token = SyntaxKind.CloseBracketToken;
case CharacterCodes.lessThan:
return token = SyntaxKind.LessThanToken;
case CharacterCodes.greaterThan:
return token = SyntaxKind.GreaterThanToken;
case CharacterCodes.equals:
return token = SyntaxKind.EqualsToken;
case CharacterCodes.comma:
+6
View File
@@ -17,6 +17,7 @@ namespace ts {
| SyntaxKind.OpenBraceToken
| SyntaxKind.CloseBraceToken
| SyntaxKind.LessThanToken
| SyntaxKind.GreaterThanToken
| SyntaxKind.OpenBracketToken
| SyntaxKind.CloseBracketToken
| SyntaxKind.EqualsToken
@@ -459,6 +460,7 @@ namespace ts {
JSDocSignature,
JSDocTag,
JSDocAugmentsTag,
JSDocAuthorTag,
JSDocClassTag,
JSDocCallbackTag,
JSDocEnumTag,
@@ -2455,6 +2457,10 @@ namespace ts {
class: ExpressionWithTypeArguments & { expression: Identifier | PropertyAccessEntityNameExpression };
}
export interface JSDocAuthorTag extends JSDocTag {
kind: SyntaxKind.JSDocAuthorTag;
}
export interface JSDocClassTag extends JSDocTag {
kind: SyntaxKind.JSDocClassTag;
}
+4
View File
@@ -6071,6 +6071,10 @@ namespace ts {
return node.kind === SyntaxKind.JSDocComment;
}
export function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag {
return node.kind === SyntaxKind.JSDocAuthorTag;
}
export function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag {
return node.kind === SyntaxKind.JSDocAugmentsTag;
}
+5
View File
@@ -315,6 +315,11 @@ namespace ts {
* {@link first link}
* Inside {@link link text} thing
* @see {@link second link text} and {@link Foo|a foo} as well.
*/`);
parsesCorrectly("authorTag",
`/**
* @author John Doe <john.doe@example.com>
* @author John Doe <john.doe@example.com> unexpected comment
*/`);
});
});
@@ -0,0 +1,44 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 112,
"modifierFlagsCache": 0,
"transformFlags": 0,
"tags": {
"0": {
"kind": "JSDocAuthorTag",
"pos": 7,
"end": 50,
"modifierFlagsCache": 0,
"transformFlags": 0,
"tagName": {
"kind": "Identifier",
"pos": 8,
"end": 14,
"modifierFlagsCache": 0,
"transformFlags": 0,
"escapedText": "author"
},
"comment": "John Doe <john.doe@example.com>"
},
"1": {
"kind": "JSDocAuthorTag",
"pos": 50,
"end": 110,
"modifierFlagsCache": 0,
"transformFlags": 0,
"tagName": {
"kind": "Identifier",
"pos": 51,
"end": 57,
"modifierFlagsCache": 0,
"transformFlags": 0,
"escapedText": "author"
},
"comment": "John Doe <john.doe@example.com> unexpected comment"
},
"length": 2,
"pos": 7,
"end": 110
}
}
+25 -20
View File
@@ -72,7 +72,7 @@ declare namespace ts {
pos: number;
end: number;
}
type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InKeyword | SyntaxKind.InferKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.RequireKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.OfKeyword;
type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
enum SyntaxKind {
@@ -379,23 +379,24 @@ declare namespace ts {
JSDocSignature = 299,
JSDocTag = 300,
JSDocAugmentsTag = 301,
JSDocClassTag = 302,
JSDocCallbackTag = 303,
JSDocEnumTag = 304,
JSDocParameterTag = 305,
JSDocReturnTag = 306,
JSDocThisTag = 307,
JSDocTypeTag = 308,
JSDocTemplateTag = 309,
JSDocTypedefTag = 310,
JSDocPropertyTag = 311,
SyntaxList = 312,
NotEmittedStatement = 313,
PartiallyEmittedExpression = 314,
CommaListExpression = 315,
MergeDeclarationMarker = 316,
EndOfDeclarationMarker = 317,
Count = 318,
JSDocAuthorTag = 302,
JSDocClassTag = 303,
JSDocCallbackTag = 304,
JSDocEnumTag = 305,
JSDocParameterTag = 306,
JSDocReturnTag = 307,
JSDocThisTag = 308,
JSDocTypeTag = 309,
JSDocTemplateTag = 310,
JSDocTypedefTag = 311,
JSDocPropertyTag = 312,
SyntaxList = 313,
NotEmittedStatement = 314,
PartiallyEmittedExpression = 315,
CommaListExpression = 316,
MergeDeclarationMarker = 317,
EndOfDeclarationMarker = 318,
Count = 319,
FirstAssignment = 60,
LastAssignment = 72,
FirstCompoundAssignment = 61,
@@ -422,9 +423,9 @@ declare namespace ts {
LastBinaryOperator = 72,
FirstNode = 149,
FirstJSDocNode = 289,
LastJSDocNode = 311,
LastJSDocNode = 312,
FirstJSDocTagNode = 300,
LastJSDocTagNode = 311,
LastJSDocTagNode = 312,
}
enum NodeFlags {
None = 0,
@@ -1581,6 +1582,9 @@ declare namespace ts {
expression: Identifier | PropertyAccessEntityNameExpression;
};
}
interface JSDocAuthorTag extends JSDocTag {
kind: SyntaxKind.JSDocAuthorTag;
}
interface JSDocClassTag extends JSDocTag {
kind: SyntaxKind.JSDocClassTag;
}
@@ -3532,6 +3536,7 @@ declare namespace ts {
function isJSDocFunctionType(node: Node): node is JSDocFunctionType;
function isJSDocVariadicType(node: Node): node is JSDocVariadicType;
function isJSDoc(node: Node): node is JSDoc;
function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag;
function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag;
function isJSDocClassTag(node: Node): node is JSDocClassTag;
function isJSDocEnumTag(node: Node): node is JSDocEnumTag;
+25 -20
View File
@@ -72,7 +72,7 @@ declare namespace ts {
pos: number;
end: number;
}
type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InKeyword | SyntaxKind.InferKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.RequireKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.OfKeyword;
type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
enum SyntaxKind {
@@ -379,23 +379,24 @@ declare namespace ts {
JSDocSignature = 299,
JSDocTag = 300,
JSDocAugmentsTag = 301,
JSDocClassTag = 302,
JSDocCallbackTag = 303,
JSDocEnumTag = 304,
JSDocParameterTag = 305,
JSDocReturnTag = 306,
JSDocThisTag = 307,
JSDocTypeTag = 308,
JSDocTemplateTag = 309,
JSDocTypedefTag = 310,
JSDocPropertyTag = 311,
SyntaxList = 312,
NotEmittedStatement = 313,
PartiallyEmittedExpression = 314,
CommaListExpression = 315,
MergeDeclarationMarker = 316,
EndOfDeclarationMarker = 317,
Count = 318,
JSDocAuthorTag = 302,
JSDocClassTag = 303,
JSDocCallbackTag = 304,
JSDocEnumTag = 305,
JSDocParameterTag = 306,
JSDocReturnTag = 307,
JSDocThisTag = 308,
JSDocTypeTag = 309,
JSDocTemplateTag = 310,
JSDocTypedefTag = 311,
JSDocPropertyTag = 312,
SyntaxList = 313,
NotEmittedStatement = 314,
PartiallyEmittedExpression = 315,
CommaListExpression = 316,
MergeDeclarationMarker = 317,
EndOfDeclarationMarker = 318,
Count = 319,
FirstAssignment = 60,
LastAssignment = 72,
FirstCompoundAssignment = 61,
@@ -422,9 +423,9 @@ declare namespace ts {
LastBinaryOperator = 72,
FirstNode = 149,
FirstJSDocNode = 289,
LastJSDocNode = 311,
LastJSDocNode = 312,
FirstJSDocTagNode = 300,
LastJSDocTagNode = 311,
LastJSDocTagNode = 312,
}
enum NodeFlags {
None = 0,
@@ -1581,6 +1582,9 @@ declare namespace ts {
expression: Identifier | PropertyAccessEntityNameExpression;
};
}
interface JSDocAuthorTag extends JSDocTag {
kind: SyntaxKind.JSDocAuthorTag;
}
interface JSDocClassTag extends JSDocTag {
kind: SyntaxKind.JSDocClassTag;
}
@@ -3532,6 +3536,7 @@ declare namespace ts {
function isJSDocFunctionType(node: Node): node is JSDocFunctionType;
function isJSDocVariadicType(node: Node): node is JSDocVariadicType;
function isJSDoc(node: Node): node is JSDoc;
function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag;
function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag;
function isJSDocClassTag(node: Node): node is JSDocClassTag;
function isJSDocEnumTag(node: Node): node is JSDocEnumTag;
@@ -0,0 +1,8 @@
//// [functionExpressionContextualTyping3.ts]
// #31114
declare function f<T>(value: T | number): void;
f((a: any) => "")
//// [functionExpressionContextualTyping3.js]
f(function (a) { return ""; });
@@ -0,0 +1,12 @@
=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts ===
// #31114
declare function f<T>(value: T | number): void;
>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0))
>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19))
>value : Symbol(value, Decl(functionExpressionContextualTyping3.ts, 1, 22))
>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19))
f((a: any) => "")
>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0))
>a : Symbol(a, Decl(functionExpressionContextualTyping3.ts, 2, 3))
@@ -0,0 +1,13 @@
=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts ===
// #31114
declare function f<T>(value: T | number): void;
>f : <T>(value: number | T) => void
>value : number | T
f((a: any) => "")
>f((a: any) => "") : void
>f : <T>(value: number | T) => void
>(a: any) => "" : (a: any) => ""
>a : any
>"" : ""
@@ -2,13 +2,13 @@
{
"marker": {
"fileName": "/tests/cases/fourslash/quickInfoJsDocTags.ts",
"position": 256
"position": 272
},
"quickInfo": {
"kind": "function",
"kindModifiers": "",
"textSpan": {
"start": 256,
"start": 272,
"length": 3
},
"displayParts": [
@@ -70,7 +70,7 @@
"tags": [
{
"name": "author",
"text": "Me"
"text": "Me <me@domain.tld>"
},
{
"name": "augments",
@@ -5,6 +5,8 @@ src/cli/util.js(60,44): error TS2345: Argument of type 'null' is not assignable
src/cli/util.js(119,38): error TS2339: Property 'sync' does not exist on type '(...args: any[]) => any'.
src/cli/util.js(372,29): error TS2532: Object is possibly 'undefined'.
src/cli/util.js(372,64): error TS2339: Property 'length' does not exist on type 'Ignore'.
src/cli/util.js(413,36): error TS2345: Argument of type '{ dot: true; nodir: boolean; }' is not assignable to parameter of type 'GlobbyOptions'.
Object literal may only specify known properties, and 'nodir' does not exist in type 'GlobbyOptions'.
src/cli/util.js(452,25): error TS2532: Object is possibly 'undefined'.
src/cli/util.js(452,52): error TS2339: Property 'length' does not exist on type 'Ignore'.
src/cli/util.js(510,44): error TS2345: Argument of type 'null' is not assignable to parameter of type 'number | undefined'.
@@ -0,0 +1,5 @@
// @noImplicitAny: true
// #31114
declare function f<T>(value: T | number): void;
f((a: any) => "")
+1 -1
View File
@@ -3,7 +3,7 @@
// @Filename: quickInfoJsDocTags.ts
/////**
//// * Doc
//// * @author Me
//// * @author Me <me@domain.tld>
//// * @augments {C<T>} Augments it
//// * @template T A template
//// * @type {number | string} A type