TypeScript/tests/cases/compiler/genericClassPropertyInheritanceSpecialization.ts
2014-07-12 17:30:19 -07:00

75 lines
2.1 KiB
TypeScript

interface KnockoutObservableBase<T> {
peek(): T;
(): T;
(value: T): void;
}
interface KnockoutObservable<T> extends KnockoutObservableBase<T> {
equalityComparer(a: T, b: T): boolean;
valueHasMutated(): void;
valueWillMutate(): void;
}
interface KnockoutObservableArray<T> extends KnockoutObservable<T[]> {
indexOf(searchElement: T, fromIndex?: number): number;
slice(start: number, end?: number): T[];
splice(start: number, deleteCount?: number, ...items: T[]): T[];
pop(): T;
push(...items: T[]): void;
shift(): T;
unshift(...items: T[]): number;
reverse(): T[];
sort(compareFunction?: (a: T, b: T) => number): void;
replace(oldItem: T, newItem: T): void;
remove(item: T): T[];
removeAll(items?: T[]): T[];
destroy(item: T): void;
destroyAll(items?: T[]): void;
}
interface KnockoutObservableArrayStatic {
fn: KnockoutObservableArray<any>;
<T>(value?: T[]): KnockoutObservableArray<T>;
}
declare module ko {
export var observableArray: KnockoutObservableArrayStatic;
}
module Portal.Controls.Validators {
export class Validator<TValue> {
private _subscription;
public message: KnockoutObservable<string>;
public validationState: KnockoutObservable<number>;
public validate: KnockoutObservable<TValue>;
constructor(message?: string) { }
public destroy(): void { }
public _validate(value: TValue): number {return 0 }
}
}
module PortalFx.ViewModels.Controls.Validators {
export class Validator<TValue> extends Portal.Controls.Validators.Validator<TValue> {
constructor(message?: string) {
super(message);
}
}
}
interface Contract<TValue> {
validators: KnockoutObservableArray<PortalFx.ViewModels.Controls.Validators.Validator<TValue>>;
}
class ViewModel<TValue> implements Contract<TValue> {
public validators: KnockoutObservableArray<PortalFx.ViewModels.Controls.Validators.Validator<TValue>> = ko.observableArray<PortalFx.ViewModels.Controls.Validators.Validator<TValue>>();
}