Typescript не может смоделировать именно то поведение, которое вы хотите.
Самым близким, что я могу придумать, является использование метода, а не свойства.Для методов мы можем определить параметр this
, определить его тип и использовать его в качестве возвращаемого типа:
class Place extends Object{
next: Place;
}
let places: Place[] = [];
interface Object{
to<T>(this: T):T;
}
Object.prototype.to = function () {
return this;
};
places[0].to().next = new Place();
Самое простое решение - фактически использовать базовый класс для всех таких объектов с типизированным свойствомкак полиморфный this
:
class Base {
get to(): this { return this; }
}
class Place extends Base{
next: Place;
}
let places: Place[] = [];
places[0].to.next = new Place();
Примечание: Загрязнение глобального Object
не кажется хорошей идеей, но в конечном итоге это ваш призыв.