Проблема в том, что t1
определяется с let
, это означает, что во время выполнения, когда вызывается функция test
в t2
, она могла быть уже изменена и не иметь тип Test
больше (ну, не во фрагменте, а с точки зрения компилятора, вы можете написать некоторый код после определения функции).
Если вы измените определение на const
, оно будет работать нормально:
class Test {
x: number = 0;
test() {}
}
const t1: Test | number = new Test();
if (t1 instanceof Test) {
console.log(t1.x); // works
let t2 = new Test();
t2.test = function() {
this.x = t1.x; // works fine
}
}