Comments 15
А вот private fields очень не хватает. Очень жаль, что до сих пор не работают в Firefox. В NodeJS уже как пол года используются. Также два года ждем нормальной реализации асинхронных конструкторов и деструкторов для классов! Очень надоели костыли.
const getValueOrOne = (x?: number) => index ?? 1;
Это ошибка. А ещё вот тут:
const getValueOrOne = (x?: number) => index !== null && index !== undefined ? : 1;
Проверка на null
не нужна. ?
добавляет только undefined
.
Естестенно, оно добавляет проверку и на нулл, и на андефайнд.
Непонятно, правда, почему не так:
function test(x) {
return x == null ? 0 : x;
}
Я думаю автор просто не понимает что такое x?: number
.
Ааа. Вы о том, что x?
позволяет передать undefined
, но не null
.
Я бы, если честно, этому бы не доверял на все 100. В силу того, что язык прикреплён к жс-составляющей во всех местах, где может прийти undefined я предпочитаю ожидать и null. Вообще рекомендую воспринимать их синонимами всегда — это очевидная ошибка, что для одной сущности в языке есть два значения.
2) >> function foo(s: readonly string[])
Будьте внимательны с readonly в конструкторах (для краткости объявил их в одном классе)
// 3 конструктора: readonly делает совершенно разные вещи
class TestReadonly {
// неизменяемая публичная переменая s (можно менять содержимое)
constructor (readonly s: string[]) {}
// массив только на чтение
constructor (s: readonly string[]) {}
// неизменяемая публичная переменая s с типом массив только на чтение
constructor (readonly s: readonly string[]) {}
}
А можно, пожалуйста, подробнее про этот момент? Или где можно посмотреть / почитать?
Там две независимых фичи.
Фича первая - Parameter properties
Всё, что слева от двоеточия - описание переменной. Если туда добавить `readonly` или private
, то переменная станет свойством:
class TestReadonly {
// свойство
constructor (private s: any) {}
constructor (readonly s: any) {}
constructor (public s: any) {}
// и даже
constructor (public readonly s: any) {}
}
Обратите внимание - совершенно не важно, что там справа от двоеточия.
Фича вторая - типизация. В данном случае readonly array
То, что справа от двоеточия - это тип. Он может быть любой, доступный в тайпскрипт и неважно, что там слева.
class TestReadonly {
constructor (s: string[]) {}
constructor (s: readonly string[]) {}
constructor (s: ReadonlyArray<string>) {}
}
Ну и конечно вы можете соединить эти две фичи - написать всё что угодно из позволеного слева и всё что угодно из позволенного справа. Просто ключевое слово readonly используется и там и там, но означает разные, хотя и похожие вещи.
const array = [1, 2, 3] as const;
Тавтология какая-то. Ну ладно, допустим.
Но что будет, если я захочу сделать вот так:
let array = [1, 2, 3] as const;
???
Использование ключевого слова await на верхнем уровне кода
Стоит заметить, что, к сожалению, асинхронные модули поддерживаются не всеми окружениями; с CommonJS-модулями в ноде, например, это, к сожалению, работать не будет.
Новые возможности TypeScript, повышающие удобство разработки