diff --git a/packages/babel-types/src/definitions/flow.js b/packages/babel-types/src/definitions/flow.js index 0bfa0ee128..b0e47a1c82 100644 --- a/packages/babel-types/src/definitions/flow.js +++ b/packages/babel-types/src/definitions/flow.js @@ -72,7 +72,7 @@ defineType("ClassImplements", { }, }); -defineInterfaceishType("DeclareClass", "TypeParameterInstantiation"); +defineInterfaceishType("DeclareClass"); defineType("DeclareFunction", { visitor: ["id"], diff --git a/packages/babel-types/test/builders/flow/declareClass.js b/packages/babel-types/test/builders/flow/declareClass.js new file mode 100644 index 0000000000..38bbc0fd87 --- /dev/null +++ b/packages/babel-types/test/builders/flow/declareClass.js @@ -0,0 +1,32 @@ +import * as t from "../../.."; + +describe("builders", function() { + describe("flow", function() { + describe("declareClass", function() { + it("accept TypeParameterDeclaration as typeParameters", function() { + const typeParameter = t.typeParameter(null, null, null); + typeParameter.name = "T"; + const declaredClass = t.declareClass( + t.identifier("A"), + t.typeParameterDeclaration([typeParameter]), + [], + t.objectTypeAnnotation([], [], [], []), + ); + expect(t.isDeclareClass(declaredClass)).toBe(true); + }); + + it("not accept typeParameterInstantiation as typeParameters", function() { + expect(() => + t.declareClass( + t.identifier("A"), + t.typeParameterInstantiation([ + t.genericTypeAnnotation(t.identifier("T")), + ]), + [], + t.objectTypeAnnotation([], [], [], []), + ), + ).toThrow(Error); + }); + }); + }); +});