import { DebugElement, ElementRef, EventEmitter, InputSignalWithTransform, OnDestroy, OutputRef, Type } from '@angular/core'; import { DOMSelector } from './dom-selectors'; import { Token } from './token'; type OptionalPropertyNames = { [K in keyof T]-?: undefined extends T[K] ? K : never; }[keyof T]; type OptionalProperties = Pick>; export type InferInputSignal = T extends InputSignalWithTransform ? K : T; export type InferInputSignals = { [P in keyof C]+?: InferInputSignal; }; export type OptionalsRequired = Required> & Partial; export type AtLeastOneRequired = { [K in keyof T]: Required> & Partial>; }[keyof T]; export type SpectatorElement = string | Element | DebugElement | ElementRef | Window | Document | DOMSelector; export type QueryType = Type | DOMSelector | string; export interface QueryOptions { read?: Token; root?: boolean; parentSelector?: Type | string | DOMSelector; } export type OutputType

= P extends EventEmitter ? T : P extends OutputRef ? T : never; export type KeysMatching = { [K in keyof T]: T[K] extends V ? K : never; }[keyof T]; export type SelectOptions = string | string[] | HTMLOptionElement | HTMLOptionElement[]; export type NestedDeferBlocks = { deferBlock: (deferBlockIndex?: number) => DeferBlocks; }; export interface DeferBlocks { renderComplete(): Promise; renderPlaceholder(): Promise; renderLoading(): Promise; renderError(): Promise; } export interface KeyboardEventOptions { key: string; keyCode: number; } export declare function doesServiceImplementsOnDestroy(testedService: S): testedService is S & OnDestroy; export declare function isString(value: any): value is string; export declare function isNumber(value: any): value is number; export declare function isType(v: any): v is Type; export declare function isHTMLOptionElementArray(value: any): value is HTMLOptionElement[]; export declare function isObject(v: any): v is object; export {};