extends также может оказаться ограничителем в обобщенных типах, сохраняя при этом значение подмножества (правило 14):
function getKey(val: any, key: K) {
// ...
}
Что значит расширить string? Будет сложно представить это в рамках наследования объекта или пытаться определить подкласс оберточного объекта типа String (правило 10).
В контексте наборов значений все просто: расширением станет любой тип, чья область является подмножеством string: и литеральные типы, и объединения строковых литеральных типов, и сами string:
getKey({}, 'x'); // ok, 'x' расширяет string
Эффективный TypeScript: 62 способа улучшить код
·
Дэн Вандеркам