interface KnockoutSubscription2 { target: KnockoutObservableBase2; } interface KnockoutObservableBase2 { subscribe(callback: (newValue: T) => void, target?: any, topic?: string): KnockoutSubscription2; } interface ValidationPlacement2 { initialize(validatable: Validatable2): void; } interface Validatable2 { validators: KnockoutObservableBase2>; } class Validator2 { private _subscription: KnockoutSubscription2; } class ViewModel { public validationPlacements: Array> = new Array>(); } class Widget { constructor(viewModelType: new () => ViewModel); // Shouldnt error on this overload constructor(viewModelType: new () => ViewModel) { } public get options(): ViewModel { return null; } }