tgoop.com/prog_way_blog/290
Create:
Last Update:
Last Update:
Что такое структурная типизация
Структурная типизация — это подход в языках программирования, который позволяет сократить количество возможных ошибок с типами, а также приведения типов, и сопоставлять не сами типы, а их структуры. Антонимом для структурной типизации является понятие номинальная типизация. Сразу же рассмотрим пример и сравним оба варианта:
У нас есть два типа Fireman
и Programmer
, а также функция, принимающая объект типа Fireman
:
type Fireman = {
name: string
}
type Programmer = {
name: string
}
const fireman: Fireman = {
name: "Alex"
}
const programmer: Programmer = {
name: "Denis"
}
const foo = (person: Fireman) => { ... }
Номинальная типизация:
foo(fireman) // OK
foo(programmer) // Error
Но почему во втором случае ошибка? Потому что разные типы: функция ожидает на вход
Fireman
, а получает Programmer
. Сравнение происходит только по самому типу.А вот пример со структурной типизацией:
foo(fireman) // OK
foo(programmer) // OK
В этом случае всё отработает корректно, но только потому что
Programmer
и Fireman
абсолютно идентичны по своей структуре.Также будет работать и в случае, если один из типов будет являться подмножеством другого:
type Fireman = {
name: string;
}
type Programmer = {
name: string;
age: number
}
const fireman: Fireman = ...
const programmer: Programmer = ...
const foo = (person: Fireman) => { ... }
foo(fireman) // OK
foo(programmer) // OK
Даже тут ошибки нет, а всё потому что тип
Fireman
полностью включен в тип Programmer
и при вызове функции объект типа Programmer
полностью удовлетворяет типу ожидаемой структуры, а следовательно и ошибки не будет. Для языка не важно, что у Programmer
есть какие-то дополнительные поля. Главное, чтобы присутствовали все из типа Fireman
и имели такой же тип.В этом и заключается весь смысл структурной типизации.
Спасибо за прочтение, это важно для меня ❤️
#web #theory #typescript
BY progway — программирование, IT
Share with your friend now:
tgoop.com/prog_way_blog/290