Необязательный оператор цепочки в Typescript

В javascript дополнительный оператор привязки поддерживается плагин babel.

Но я не могу найти, как это сделать в Typescript. Любая идея?

Ответ 1

Во время записи TypeScript не поддерживает дополнительный оператор цепочки. См. Обсуждение трекера TypeScript: https://github.com/Microsoft/TypeScript/issues/16

В качестве предупреждения семантика этого оператора по-прежнему очень важна, поэтому TypeScript еще не добавил его. Код, написанный сегодня против плагина Babel, может изменить поведение в будущем без предупреждения, что приведет к сложным ошибкам. Обычно я рекомендую людям не начинать использовать синтаксис, поведение которого еще не определено.

Ответ 2

Обновление 15 октября 2019 г.

Поддержка теперь существует в [email protected]

Скажите спасибо fooobar.com/questions/725295/... за обновление!


Хотя TypeScript и сообщество поддерживают этот оператор, до тех пор, пока TC39 не закрепит текущее предложение (которое на момент написания этой статьи было в stage 1), нам придется использовать альтернативы.

Существует одна альтернатива, которая приближается к необязательной цепочке без ущерба для инструментов разработки: https://github.com/rimeto/ts-optchain

В этой статье рассказывается о том, чего удалось добиться создателям при попытке отразить собственный оператор цепочки:

  1. Используйте синтаксис, который близко отражает цепочечный доступ к свойствам
  2. Предложите краткое выражение значения по умолчанию при сбое обхода
  3. Включить инструменты автозавершения кода IDE и проверку пути во время компиляции

На практике это выглядит так:

import { oc } from 'ts-optchain';

// Each of the following pairs are equivalent in result.
oc(x).a();
x && x.a;

oc(x).b.d('Default');
x && x.b && x.b.d || 'Default';

oc(x).c[100].u.v(1234);
x && x.c && x.c[100] && x.c[100].u && x.c[100].u.v || 1234;

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

Кроме того, большое спасибо Райану Кавано за всю работу, которую вы проводите, пропагандируя этого оператора на TC39!