declare module "@babel/template" { declare type PublicOpts = { placeholderWhitelist?: ?Set, placeholderPattern?: ?(RegExp | false), preserveComments?: ?boolean, syntacticPlaceholders?: ?boolean, }; declare type PublicReplacements = { [string]: mixed } | Array; declare type TemplateBuilder = { ast: { (tpl: string, opts: ?PublicOpts): T, (tpl: Array, ...args: Array): T, }, (opts: PublicOpts): TemplateBuilder, (tpl: string, opts: ?PublicOpts): (?PublicReplacements) => T, (tpl: Array, ...args: Array): (?PublicReplacements) => T, }; declare type Smart = TemplateBuilder< Array | BabelNodeStatement >; declare type Statement = TemplateBuilder; declare type Statements = TemplateBuilder>; declare type Expression = TemplateBuilder; declare type Program = TemplateBuilder; declare export default Smart & { smart: Smart, statement: Statement, statements: Statements, expression: Expression, program: Program, }; }