mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-29 16:29:19 -05:00
JSDoc supports null, undefined and never types
This commit is contained in:
@@ -5547,6 +5547,12 @@ namespace ts {
|
||||
return nullType;
|
||||
case SyntaxKind.NeverKeyword:
|
||||
return neverType;
|
||||
case SyntaxKind.JSDocNullKeyword:
|
||||
return nullType;
|
||||
case SyntaxKind.JSDocUndefinedKeyword:
|
||||
return undefinedType;
|
||||
case SyntaxKind.JSDocNeverKeyword:
|
||||
return neverType;
|
||||
case SyntaxKind.ThisType:
|
||||
case SyntaxKind.ThisKeyword:
|
||||
return getTypeFromThisTypeNode(node);
|
||||
|
||||
@@ -1241,7 +1241,7 @@ namespace ts {
|
||||
// not in error recovery. If we're in error recovery, we don't want an errant
|
||||
// semicolon to be treated as a class member (since they're almost always used
|
||||
// for statements.
|
||||
return lookAhead(isClassMemberStart) || (token() === SyntaxKind.SemicolonToken && !inErrorRecovery);
|
||||
return lookAhead(isClassMemberStart) || (token() === SyntaxKind.SemicolonToken && !inErrorRecovery);
|
||||
|
||||
case ParsingContext.EnumMembers:
|
||||
// Include open bracket computed properties. This technically also lets in indexers,
|
||||
@@ -5890,6 +5890,9 @@ namespace ts {
|
||||
case SyntaxKind.NumberKeyword:
|
||||
case SyntaxKind.BooleanKeyword:
|
||||
case SyntaxKind.SymbolKeyword:
|
||||
case SyntaxKind.VoidKeyword:
|
||||
case SyntaxKind.NullKeyword:
|
||||
case SyntaxKind.UndefinedKeyword:
|
||||
case SyntaxKind.NeverKeyword:
|
||||
return parseTokenNode<JSDocType>();
|
||||
case SyntaxKind.StringLiteral:
|
||||
|
||||
@@ -351,6 +351,9 @@ namespace ts {
|
||||
JSDocPropertyTag,
|
||||
JSDocTypeLiteral,
|
||||
JSDocLiteralType,
|
||||
JSDocNullKeyword,
|
||||
JSDocUndefinedKeyword,
|
||||
JSDocNeverKeyword,
|
||||
|
||||
// Synthesized list
|
||||
SyntaxList,
|
||||
@@ -383,7 +386,7 @@ namespace ts {
|
||||
FirstJSDocNode = JSDocTypeExpression,
|
||||
LastJSDocNode = JSDocLiteralType,
|
||||
FirstJSDocTagNode = JSDocComment,
|
||||
LastJSDocTagNode = JSDocLiteralType
|
||||
LastJSDocTagNode = JSDocNeverKeyword
|
||||
}
|
||||
|
||||
export const enum NodeFlags {
|
||||
|
||||
20
tests/baselines/reference/jsdocNeverUndefinedNull.js
Normal file
20
tests/baselines/reference/jsdocNeverUndefinedNull.js
Normal file
@@ -0,0 +1,20 @@
|
||||
//// [in.js]
|
||||
/**
|
||||
* @param {never} p1
|
||||
* @param {undefined} p2
|
||||
* @param {null} p3
|
||||
* @returns {void} nothing
|
||||
*/
|
||||
function f(p1, p2, p3) {
|
||||
}
|
||||
|
||||
|
||||
//// [out.js]
|
||||
/**
|
||||
* @param {never} p1
|
||||
* @param {undefined} p2
|
||||
* @param {null} p3
|
||||
* @returns {void} nothing
|
||||
*/
|
||||
function f(p1, p2, p3) {
|
||||
}
|
||||
14
tests/baselines/reference/jsdocNeverUndefinedNull.symbols
Normal file
14
tests/baselines/reference/jsdocNeverUndefinedNull.symbols
Normal file
@@ -0,0 +1,14 @@
|
||||
=== tests/cases/conformance/jsdoc/in.js ===
|
||||
/**
|
||||
* @param {never} p1
|
||||
* @param {undefined} p2
|
||||
* @param {null} p3
|
||||
* @returns {void} nothing
|
||||
*/
|
||||
function f(p1, p2, p3) {
|
||||
>f : Symbol(f, Decl(in.js, 0, 0))
|
||||
>p1 : Symbol(p1, Decl(in.js, 6, 11))
|
||||
>p2 : Symbol(p2, Decl(in.js, 6, 14))
|
||||
>p3 : Symbol(p3, Decl(in.js, 6, 18))
|
||||
}
|
||||
|
||||
14
tests/baselines/reference/jsdocNeverUndefinedNull.types
Normal file
14
tests/baselines/reference/jsdocNeverUndefinedNull.types
Normal file
@@ -0,0 +1,14 @@
|
||||
=== tests/cases/conformance/jsdoc/in.js ===
|
||||
/**
|
||||
* @param {never} p1
|
||||
* @param {undefined} p2
|
||||
* @param {null} p3
|
||||
* @returns {void} nothing
|
||||
*/
|
||||
function f(p1, p2, p3) {
|
||||
>f : (p1: never, p2: undefined, p3: null) => void
|
||||
>p1 : never
|
||||
>p2 : undefined
|
||||
>p3 : null
|
||||
}
|
||||
|
||||
11
tests/cases/conformance/jsdoc/jsdocNeverUndefinedNull.ts
Normal file
11
tests/cases/conformance/jsdoc/jsdocNeverUndefinedNull.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
// @allowJs: true
|
||||
// @filename: in.js
|
||||
// @out: out.js
|
||||
/**
|
||||
* @param {never} p1
|
||||
* @param {undefined} p2
|
||||
* @param {null} p3
|
||||
* @returns {void} nothing
|
||||
*/
|
||||
function f(p1, p2, p3) {
|
||||
}
|
||||
Reference in New Issue
Block a user