Как стать автором
Обновить

Комментарии 19

Мммм, я правильно понимаю, что построили сначала строго-типизированную надстройку над мерзко-утино-почтине-типизированным javascript, а потом, через N лет, это всё решили отменить?)

Нет. Это было сделано раньше. Тип any был с самого сразу. Иначе, как бы оно дружило с JS?

Нет, ну any это any. Заглушка в стиле «возвращает то, не знаю что». А object это именно объект, просто с утиной типизацией (т.е. требования к наличию определённых свойств в этом объекте определяются нижележащим кодом).

Ну, как бы any, как мне кажется, делает "строго-типизированную надстройку" не такой уж и строгой прям с фундамента. Заглушка any не только про "возвращает то, не знаю что". Ее можно пихать во все места и не заморачивать мозг всеми этими типизациями. С object уже не то манто. Как, повторюсь, мне кажется.

На сколько я понял из статьи это тоже заглушка типа any, которая только проверяет на не примитвность. Это не значит, что можно обращаться к любым свойствам без приведения.

Благодаря этой заглушки они усилили типизацию как раз, потому что теперь если метод принципе не может принять примитив он не будет допущен ts компилятором. any — такое бы позволил.

Что не отменяется мерзости js

Нет, они ввели новый тип для того чтобы более точно описать некоторые существующие интерфейсы. Например, тот же Object.create. Каким образом уточнение модели ее вдруг отменяет?

Вообще это нормально, но они зря его назвали также как существующий Object. Будет большая путаница несмотря на все объяснения. Разница в регистре одной буквы это не о чем. Вообще это очень напоминает C#. Там есть классы (class) и структуры (struct). Под структурой понимается любой ValueType (числа, булевые значения, в общем примитивные типы), а под классами как раз — классы (то что тут назвали object). Также есть корень иерархии — тип System.Object (можно с маленькой буквы object — алиас просто). Короче я о том что надо было поднапрячься и все же придумать имя получше…

На самом деле, такое наименование следует тому же принципи что и Number:number, String:string, Boolean:boolean. С этим же ни у кого проблем не возникает.

Именно так и есть. Точно так как и в Java, Number — это упакованная версия number.


Разве что вот теперь Object и object отличаются не упакованностью, а занимают разные места в иерархии наследования...

Разве null и undefined являются типами? А не значениями?

Там написано, что это «Специальное значение».
Значение null не относится ни к одному из типов выше, а образует свой отдельный тип, состоящий из единственного значения null
Это просто специальное значение, которое имеет смысл «ничего» или «значение неизвестно».
Хотя typeof null выдает не null.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории