class Foo {
public biz = 0
bar(this: Readonly<Foo>) {
this.baz() // <-- Тут происходит, как бы, неявный каст типа Readonly<Foo> в просто Foo
}
baz(this: Foo) { // Даже если здесь я явно укажу тип для this
this.biz = 5
}
}
type SafeType<T> = {
readonly [P in keyof T as T[P] extends Function ? ThisParameterType<T[P]> extends SafeType<T> ? P : never : P]: T[P]
}this внутри метода в какую-нить функцию, а та уже ничего не будет знать о твоей магии;