diff --git a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts index 8107e5508b89..d0ae215cd1c5 100644 --- a/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts +++ b/packages/babel-types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts @@ -1,4 +1,5 @@ import { + anyTypeAnnotation, stringTypeAnnotation, numberTypeAnnotation, voidTypeAnnotation, @@ -25,7 +26,8 @@ export default function createTypeAnnotationBasedOnTypeof( | t.VoidTypeAnnotation | t.NumberTypeAnnotation | t.BooleanTypeAnnotation - | t.GenericTypeAnnotation { + | t.GenericTypeAnnotation + | t.AnyTypeAnnotation { if (type === "string") { return stringTypeAnnotation(); } else if (type === "number") { @@ -40,7 +42,11 @@ export default function createTypeAnnotationBasedOnTypeof( return genericTypeAnnotation(identifier("Object")); } else if (type === "symbol") { return genericTypeAnnotation(identifier("Symbol")); + } else if (type === "bigint") { + // todo: use BigInt annotation when Flow supports BigInt + // https://github.com/facebook/flow/issues/6639 + return anyTypeAnnotation(); } else { - throw new Error("Invalid typeof value"); + throw new Error("Invalid typeof value: " + type); } } diff --git a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap index ee98fe3b5eeb..6f4ca7d0dcca 100644 --- a/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap +++ b/packages/babel-types/test/builders/flow/__snapshots__/createTypeAnnotationBasedOnTypeof.js.snap @@ -1,5 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`builders flow createTypeAnnotationBasedOnTypeof bigint 1`] = ` +Object { + "type": "AnyTypeAnnotation", +} +`; + exports[`builders flow createTypeAnnotationBasedOnTypeof function 1`] = ` Object { "id": Object { diff --git a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js index d686e5c4984b..dfe6efb42c23 100644 --- a/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js +++ b/packages/babel-types/test/builders/flow/createTypeAnnotationBasedOnTypeof.js @@ -11,6 +11,13 @@ describe("builders", function () { undefined: typeof undefined, function: typeof function () {}, symbol: typeof Symbol(), + bigint: (() => { + try { + return eval("typeof 0n"); + } catch (e) { + return "bigint"; + } + })(), }; for (const name in values) {