abstract class AUri {}
type ConstrUri = new() => AUri;
class Uri extends AUri {
get index() { return '/'}
}
abstract class AController<T> {
public urls: T;
constructor(c: T) {
this.urls = c;
}
}
class Controller extends AController<Uri> {
constructor() {
super(new Uri);
}
}
const c = new Controller;
console.log(c.urls.index);
abstract class PageServ {
abstract templateName: string;
abstract httpStatus: number;
constructor() {
}
get template(): string {
return this.templateName + '.html';
}
}
const MainPageServ = class extends PageServ {
public templateName: string;
public httpStatus: number;
constructor() {
super();
this.templateName = 'MainPage';
this.httpStatus = 200;
}
}
function fabric(Page: new () => PageServ) {
const inst = new Page;
console.log(inst.httpStatus);
}
fabric(MainPageServ);
Но здесь есть проблема: тайпскрипт не выдаст ошибки, если я забуду реализовать указанные поля в дочернем классе.
abstract class PageServ {
abstract templateName: string;
abstract httpStatus: number;
constructor() {
}
get template(): string {
return this.templateName + '.html';
}
}
abstract class PageServ {
declare public templateName: string;
declare public httpStatus: number;
constructor() {
}
get template(): string {
return this.templateName + '.html';
}
}
class MainPageServ extends PageServ{
constructor() {
super();
this.templateName = 'MainPage';
this.httpStatus = 200;
}
}
const page = new MainPageServ;
console.log(page.httpStatus);