В соответствии с машинописным текстом do c: Использование параметров типа в Generi c Ограничения , код с использованием ограничения generi c выглядит следующим образом:
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a"); // okay
getProperty(x, "m"); // error: Argument of type 'm' isn't assignable to 'a' | 'b' | 'c' | 'd'.
Однако если я попытаюсь:
function getProperty<T>(obj: T, key: keyof T) {
return obj[key];
}
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a"); // okay
getProperty(x, "m"); // error: Argument of type 'm' isn't assignable to 'a' | 'b' | 'c' | 'd'.
Это работает нормально, и я не вижу никакой причины, почему бы здесь не использовать ограничение типа.
Так, когда я должен использовать ограничение типа? Специально для ключевого слова extends
здесь.