泛型約束
簡單約束:
interface IRunnable {
run(): void;
}
interface IRunner<T extends IRunnable> {
runSafe(runnable: T): void;
}
更復雜的約束:
interface IRunnble<U> {
run(): U;
}
interface IRunner<T extends IRunnable<U>, U> {
runSafe(runnable: T): U;
}
更復雜:
interface IRunnble<V> {
run(parameter: U): V;
}
interface IRunner<T extends IRunnable<U, V>, U, V> {
runSafe(runnable: T, parameter: U): V;
}
內聯型別約束:
interface IRunnable<T extends { run(): void }> {
runSafe(runnable: T): void;
}