class Animal { run() { } } class Cat extends Animal { meow } class Dog extends Animal { woof } function run(a: Cat | Dog) { a.run(); } function f(a: T) { a.run(); run(a); }