В TypeScript появятся 2 новые убийственные функции

TypeScript 4.7

Грядущая версия TypeScript привнесет в язык множество новых возможностей и улучшений, но есть две особенности, которые показались мне особенно интересными:

1- Инстанционные выражения

2- extends Constraints on infer Type Variables

Значение новых возможностей

Если вы похожи на меня и любите создавать сложные определения типов, которые обеспечивают высокий уровень опыта разработчика для вас и ваших коллег, то вы должны быть в курсе этих новых возможностей, поскольку они значительно упростят процесс написания этих определений типов.

  • Уменьшите сложность ваших типов;
  • Уменьшите многословность типов;
  • Уменьшить количество обходных путей;

Выражения инстанцирования

Для всех, кто написал больше, чем несколько общих функций, эта новая возможность, вероятно, является тем, что могло бы спасти вас от написания «дрянных» обходных путей JS, чтобы получить некоторые типы.

Выражения инстанцирования позволят нам получить общий тип без части «инстанцирования» 🤯.

До 4.7:

type Dog = {
  name: string
  isGoodBoy: boolean;
}

type Cat = {
  name: string
}

function getBigPet<T>(pet: T){
    return {...pet, big: true}
}

// 1- Need to have a typed param to pass 👎
const dog: Dog = {name: "Jake", isGoodBoy: true}

// 2- Need to create an arrow function 👎
const getBigDog = () => getBigPet(dog);
Вход в полноэкранный режим Выход из полноэкранного режима

До выхода этой новой версии не было способа использовать тип общей функции, что заставляло многих из нас создавать обходные пути путем написания ненужного JS кода. ❌

После 4.7

type Dog = {
  name: string
  isGoodBoy: boolean;
}

type Cat = {
  name: string
}

function getBigPet<T>(pet: T){
    return {...pet, big: true}
}

// Can "instantiate" on the fly ✅
const getBigDog = getBigPet<Dog>;

// No need to bring in any extra types ✅
type BigCat = ReturnType<typeof getBigPet<Cat>>
Вход в полноэкранный режим Выход из полноэкранного режима

Итак, то, что Instantiation Expressions привносят в таблицу, это простота, с которой можно получить тип общей функции без каких-либо обходных путей или создания дополнительного JS-кода.

ПРОС

  • Нет необходимости писать JS-код только ради типизации;
  • API типов упрощается;
  • Использование ReturnType функции только что стало гражданином первого класса;

extends Constraints on infer Type Variables

Эта новая возможность поможет любому написать гораздо менее многословные типы, когда они зависят от ограничений инферентных типов.

По сути, она действует как ранний return оператор, который мы (разработчики) часто используем в языках типа JavaScript для немедленного перехода к логическому пути «false», когда выполняется некоторое условие.

До версии 4.7

// A type that returns the First and Last elements of the Number type 

// 😔😔😔 This feels overwhelming...
type FirstAndLastNumber<T extends any[]> = T extends [
  infer Head,
  ...any,
  infer Tail
]
  ? Head extends number
    ? Tail extends number
      ? [Head, Tail]
      : never
    : never
  : never;
Вход в полноэкранный режим Выход из полноэкранного режима

До появления этой функции не было возможности сделать «раннюю проверку» выводимых типов, и из-за этого мы создавали очень многословные и «страшные» типы. ❌

После 4.7

// The "same" type as before 🤯🤯🤯
type FirstAndLastNumber<T extends any[]> = T extends [

// 1- Add the extends constraint here
  infer Head extends number,
  ...any,

// 2- Add the extends constraint here
  infer Tail extends number
] ? [Head, Tail]: never;
Вход в полноэкранный режим Выход из полноэкранного режима

extends Constraints on infer Type Variables действительно упрощает процесс определения типов, которые полагаются на переменные выводимого типа — больше, чем изменение синтаксиса, эта возможность действительно делает ментальную модель создания типов на один шаг ближе к той, которую мы используем в «реальном программировании».

ПРОС
1- Более чистые и менее многословные типы;
2- Снижает барьер сложности для других, чтобы прикоснуться к этому иначе «чудовищному» типу;
3- Компилятор TypeScript будет быстрее, потому что он сможет возвращаться раньше;

Заключение

Используя новые возможности версии 4.7 TypeScript, вы сможете значительно снизить сложность определений типов, что значительно упростит понимание и даже разработку на их основе.

P.S. Вы уже можете попробовать эти новые возможности в TypeScript Playground.


Обязательно следите за мной в twitter, если хотите прочитать о лучших практиках TypeScript или о веб-разработке в целом!

Оцените статью
Procodings.ru
Добавить комментарий