TypeScript использует систему типов структурный .Это означает, что типы сравниваются по их содержимому .В отличие от большинства других повседневных языков, которые используют номинальные системы типов, в которых типы сравниваются по их имени .Следовательно, в TypeScript ваш тип B может использоваться там, где ожидается тип A, поскольку «форма» типа B точно соответствует «форме», необходимой для типа A - все члены типа A присутствуют в типе B и имеют свои собственные типы.match.
Этот подход был выбран дизайнерами языка TypeScript, потому что он хорошо сочетается с существующими идиомами JavaScript, такими как использование литералов простых объектов, полученных через AJAX, без приведения их в именованный тип.Этот выбор дизайна вызывает некоторые трения в сценариях, когда элементы системы номинального типа были бы удобны (например, типы идентификаторов, такие как ProductId
и OrderId
должны быть несовместимы).
Соответствующее чтение: