import { Imm } from 'ts-imm';
import { CodeBlock } from './CodeBlock';
import { CodeWriter } from './CodeWriter';
import { DecoratorSpec } from './DecoratorSpec';
import { Modifier } from './Modifier';
import { SymbolSpec } from './SymbolSpecs';
import { TypeName } from './TypeNames';
export declare class ParameterSpec extends Imm<ParameterSpec> {
    static create(name: string, type: TypeName, optional?: boolean, ...modifiers: Modifier[]): ParameterSpec;
    static emitAll(parameters: ParameterSpec[], codeWriter: CodeWriter, enclosed: boolean, rest: ParameterSpec | undefined, emitFn: ((p: ParameterSpec, rest: boolean) => void) | undefined): void;
    readonly name: string;
    readonly type: TypeName;
    readonly optional: boolean;
    readonly decorators: DecoratorSpec[];
    readonly modifiers: Modifier[];
    readonly defaultValueField: CodeBlock | undefined;
    emit(codeWriter: CodeWriter, includeType?: boolean, isRest?: boolean): void;
    emitDefaultValue(codeWriter: CodeWriter): void;
    addDecorators(...decoratorSpecs: DecoratorSpec[]): this;
    addDecorator(decoratorSpec: DecoratorSpec | SymbolSpec | string): this;
    addModifiers(...modifiers: Modifier[]): this;
    defaultValue(format: string, ...args: any[]): this;
    defaultValueBlock(codeBlock?: CodeBlock): this;
    toString(): string;
}
