Причина синтаксической ошибки в том, что throw
является оператором, поэтому его нельзя использовать в качестве операнда оператора.
Существует предложение JavaScript для throw
выражений прорабатывая процесс TC39, который в настоящее время находится на этапе 2. Если он дойдет до этапа 3 (и он уже соответствует обычным критериям, поэтому комитет, вероятно, будет стремиться к консенсусу для продвижения вперед на следующем заседании), вы можно ожидать, что вскоре он появится в TypeScript.
С выражением throw
вы можете написать это (если вам нужно значение someObject.someProperty
):
const myValue = someObject?.someProperty ?? throw new Error("custom error here");
или если вы хотите someObject.someProperty.someProperty
(что, как я думаю, ваша C# версия делает):
const myValue = (someObject?.someProperty ?? throw new Error("custom error here")).someProperty;
Для него есть плагин Babel , который вы можете использовать сейчас. Вот первый пример, приведенный выше для REPL Бабеля.
Примечание: Вы сказали, что хотите выбросить ошибку custom , но для всех, кто читает это тот, кто не нуждается в пользовательской ошибке:
Если вы хотите someObject.someProperty.someProperty
, без ошибок, если someObject
равно null
/ undefined
, но выдает ошибку, если someObject.someProperty
равно null
/ undefined
, вы можете сделать:
const myValue = someObject?.someProperty.someProperty;
С этим:
- Если
someObject
равен null
или undefined
, myValue
получит значение undefined
- Если
someObject
не null
или undefined
, а someObject.someProperty
- null
или undefined
, вы получите ошибку, потому что мы не использовали ?.
после первого someProperty
. - Если
someObject
и someObject.someProperty
оба не null
или undefined
, myValue
получит результат поиска someObject.someProperty.someProperty
.