TypeScript: reserve unknown as TSUnknownKeyword (#8755)

This commit is contained in:
Pig Fang 2018-09-26 01:19:32 +08:00 committed by Brian Ng
parent 889cdb8da5
commit f38be13113
11 changed files with 485 additions and 371 deletions

View File

@ -127,6 +127,9 @@ export function TSIndexSignature(node) {
export function TSAnyKeyword() {
this.word("any");
}
export function TSUnknownKeyword() {
this.word("unknown");
}
export function TSNumberKeyword() {
this.word("number");
}

View File

@ -1,4 +1,5 @@
let a: any;
let un: unknown;
let b: boolean;
let ne: never;
let nul: null;

View File

@ -1,4 +1,5 @@
let a: any;
let un: unknown;
let b: boolean;
let ne: never;
let nul: null;
@ -7,4 +8,4 @@ let o: object;
let st: string;
let sy: symbol;
let u: undefined;
let v: void;
let v: void;

View File

@ -57,6 +57,8 @@ function keywordTypeFromName(
return "TSSymbolKeyword";
case "undefined":
return "TSUndefinedKeyword";
case "unknown":
return "TSUnknownKeyword";
default:
return undefined;
}

View File

@ -1119,6 +1119,7 @@ export type TsTypeBase = NodeBase;
export type TsKeywordTypeType =
| "TSAnyKeyword"
| "TSUnknownKeyword"
| "TSNumberKeyword"
| "TSObjectKeyword"
| "TSBooleanKeyword"

View File

@ -1,4 +1,5 @@
let a: any;
let un: unknown;
let b: boolean;
let ne: never;
let nul: null;

File diff suppressed because it is too large Load Diff

View File

@ -762,6 +762,9 @@ export function assertTSIndexSignature(node: Object, opts?: Object = {}): void {
export function assertTSAnyKeyword(node: Object, opts?: Object = {}): void {
assert("TSAnyKeyword", node, opts);
}
export function assertTSUnknownKeyword(node: Object, opts?: Object = {}): void {
assert("TSUnknownKeyword", node, opts);
}
export function assertTSNumberKeyword(node: Object, opts?: Object = {}): void {
assert("TSNumberKeyword", node, opts);
}

View File

@ -698,6 +698,11 @@ export function TSAnyKeyword(...args: Array<any>): Object {
}
export { TSAnyKeyword as tsAnyKeyword };
export { TSAnyKeyword as tSAnyKeyword };
export function TSUnknownKeyword(...args: Array<any>): Object {
return builder("TSUnknownKeyword", ...args);
}
export { TSUnknownKeyword as tsUnknownKeyword };
export { TSUnknownKeyword as tSUnknownKeyword };
export function TSNumberKeyword(...args: Array<any>): Object {
return builder("TSNumberKeyword", ...args);
}

View File

@ -128,6 +128,7 @@ defineType("TSIndexSignature", {
const tsKeywordTypes = [
"TSAnyKeyword",
"TSUnknownKeyword",
"TSNumberKeyword",
"TSObjectKeyword",
"TSBooleanKeyword",

View File

@ -2406,6 +2406,20 @@ export function isTSAnyKeyword(node: Object, opts?: Object): boolean {
return false;
}
export function isTSUnknownKeyword(node: Object, opts?: Object): boolean {
if (!node) return false;
const nodeType = node.type;
if (nodeType === "TSUnknownKeyword") {
if (typeof opts === "undefined") {
return true;
} else {
return shallowEqual(node, opts);
}
}
return false;
}
export function isTSNumberKeyword(node: Object, opts?: Object): boolean {
if (!node) return false;
@ -4116,6 +4130,7 @@ export function isTSType(node: Object, opts?: Object): boolean {
if (
nodeType === "TSType" ||
"TSAnyKeyword" === nodeType ||
"TSUnknownKeyword" === nodeType ||
"TSNumberKeyword" === nodeType ||
"TSObjectKeyword" === nodeType ||
"TSBooleanKeyword" === nodeType ||