For the following code, when I've supplied a type parameter to the performAs method of the concrete instance runner
is it possible to get my editor to auto suggest easyTask
or hardTask
since they are the only things in scope assignable to the constraint? Beyond that is it possible within the scope of a project?
eg when I type runner.performAs([
I would like to see easyTask, hardTask
interface Task {
_type: string;
perform: () => void;
}
class EasyTask implements Task {
_type: "easy";
perform: () => {};
}
class HardTask implements Task {
_type: "hard";
perform: () => {};
}
class InvalidTask implements Task {
_type: "invalid";
perform: () => {};
}
const easyTask = new EasyTask();
const hardTask = new HardTask();
const invalidTask = new InvalidTask();
type AllowedTasks = HardTask | EasyTask;
class TaskRunner {
performTasks<T extends Task>(tasks: T[]) {
tasks.forEach((t) => t.perform());
}
}
const runner = new TaskRunner();
runner.performTasks<AllowedTasks>([easyTask]);
runner.performTasks<AllowedTasks>([easyTask, invalidTask]); // type error , invalidTask not assignable