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() { export function TSAnyKeyword() {
this.word("any"); this.word("any");
} }
export function TSUnknownKeyword() {
this.word("unknown");
}
export function TSNumberKeyword() { export function TSNumberKeyword() {
this.word("number"); this.word("number");
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,5 @@
let a: any; let a: any;
let un: unknown;
let b: boolean; let b: boolean;
let ne: never; let ne: never;
let nul: null; 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 { export function assertTSAnyKeyword(node: Object, opts?: Object = {}): void {
assert("TSAnyKeyword", node, opts); assert("TSAnyKeyword", node, opts);
} }
export function assertTSUnknownKeyword(node: Object, opts?: Object = {}): void {
assert("TSUnknownKeyword", node, opts);
}
export function assertTSNumberKeyword(node: Object, opts?: Object = {}): void { export function assertTSNumberKeyword(node: Object, opts?: Object = {}): void {
assert("TSNumberKeyword", node, opts); 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 { 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 { export function TSNumberKeyword(...args: Array<any>): Object {
return builder("TSNumberKeyword", ...args); return builder("TSNumberKeyword", ...args);
} }

View File

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

View File

@ -2406,6 +2406,20 @@ export function isTSAnyKeyword(node: Object, opts?: Object): boolean {
return false; 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 { export function isTSNumberKeyword(node: Object, opts?: Object): boolean {
if (!node) return false; if (!node) return false;
@ -4116,6 +4130,7 @@ export function isTSType(node: Object, opts?: Object): boolean {
if ( if (
nodeType === "TSType" || nodeType === "TSType" ||
"TSAnyKeyword" === nodeType || "TSAnyKeyword" === nodeType ||
"TSUnknownKeyword" === nodeType ||
"TSNumberKeyword" === nodeType || "TSNumberKeyword" === nodeType ||
"TSObjectKeyword" === nodeType || "TSObjectKeyword" === nodeType ||
"TSBooleanKeyword" === nodeType || "TSBooleanKeyword" === nodeType ||