Сегодня работал с таким кодом. Решил разобрать что тут и как.
Это typings из .d.ts файла
export function useCode(
exec: () => {
}
)
Когда описываются параметры для некоторой функции, то параметр метод, то есть если там будет использована функция, обозначается следующим образом:
export function useCode(
exec: () =>
| Nullable<AnimatedNode<number>[]
)
Получается это будет параметр exec, который должен вернуть массив из AnimatedNode или null или undefined.
type Nullable = T | null | undefined;
Получается создается type дженерик. Он принимает в себя тип как параметр. Вообще, о дженериках стоит думать как о функциях которые принимают параметры, но вместо круглых скобок () используют вот такие <>. Это поможет легче понять новый синтаксис.
Конкретно в примере выше получается некий fail-safe вариант — вот нам пожалуйста generic и если что, он может быть null или undefined.
Для чего это можно использовать? Это весьма удобная конструкция если надо немного себя подстраховать.