Pull to refresh

Comments 15

Иммутабельные объекты, кстати, в JS тоже уже лет 8 как есть.
А вот private fields очень не хватает. Очень жаль, что до сих пор не работают в Firefox. В NodeJS уже как пол года используются. Также два года ждем нормальной реализации асинхронных конструкторов и деструкторов для классов! Очень надоели костыли.
Все верно, только ошибки во время компиляции (траспиляции) намного приятнее ошибок во время выполнения.
Не знаком с TypeScript, но тут точно на вход передается «x», а сравнивать надо «index»?
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. Вообще рекомендую воспринимать их синонимами всегда — это очевидная ошибка, что для одной сущности в языке есть два значения.

Тогда можно и на NaN проверять. И на false на всякий пожарный :D

Э нет, эти фигни уже не есть синонимичными)

1) Сухо, но лучшее что я видел и всем рекомендую про optional-chaining

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-модулями в ноде, например, это, к сожалению, работать не будет.

Sign up to leave a comment.