import { Type, TypeLiteral, TypeObjectLiteral, TypeParameter, TypePromise, TypeTemplateLiteral, TypeTuple } from './type.js'; type AssignableType = Type | string | boolean | number | symbol | bigint | undefined | null; type StackEntry = { left: Type; right: Type; }; /** * The check of `extends` in Typescript. This function can be read as `left extends right`. * * See https://www.typescriptlang.org/docs/handbook/type-compatibility.html#any-unknown-object-void-undefined-null-and-never-assignability * This algo follows strict mode. * * Warning: If you do not pass Type objects, typeInfer() is used which does not use cache (it is designed to be called withing type processor) */ export declare function isExtendable(leftValue: AssignableType, rightValue: AssignableType, extendStack?: StackEntry[]): boolean; export declare function _isExtendable(left: Type, right: Type, extendStack?: StackEntry[]): boolean; /** * We don't want to embed in each and every file the type definition of Promise, * so we do it ondemand at runtime instead. This saves bundle size. */ export declare function createPromiseObjectLiteral(type: TypePromise): TypeObjectLiteral; export declare function parametersToTuple(parameters: TypeParameter[]): TypeTuple; export declare function extendTemplateLiteral(left: TypeLiteral | TypeTemplateLiteral, right: TypeTemplateLiteral): boolean; export {};