0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
1
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
2
<p>Авторы языка программирования TypeScript официально выпустили версию 4.6 Beta. Они улучшили функционал языка и добавили несколько серьёзных изменений. Скачать обновление можно через<a>NuGet</a>или npm:</p>
2
<p>Авторы языка программирования TypeScript официально выпустили версию 4.6 Beta. Они улучшили функционал языка и добавили несколько серьёзных изменений. Скачать обновление можно через<a>NuGet</a>или npm:</p>
3
npm install typescript@beta<p>Конструкторы теперь разрешают использовать произвольный код перед методом<strong>super ()</strong>. Раньше такое поведение вызвало бы ошибку, но в обновлении решили эту проблему. Сейчас у разработчиков есть возможность более гибко пользоваться конструкторами.</p>
3
npm install typescript@beta<p>Конструкторы теперь разрешают использовать произвольный код перед методом<strong>super ()</strong>. Раньше такое поведение вызвало бы ошибку, но в обновлении решили эту проблему. Сейчас у разработчиков есть возможность более гибко пользоваться конструкторами.</p>
4
<p>TypeScript научился правильно делать выводы об индексах типов, которые ссылаются на методы объектов. Например, код ниже показывает, что вызов функции<strong>record.f (record.v) </strong>- корректный.</p>
4
<p>TypeScript научился правильно делать выводы об индексах типов, которые ссылаются на методы объектов. Например, код ниже показывает, что вызов функции<strong>record.f (record.v) </strong>- корректный.</p>
5
interface TypeMap { "number": number; "string": string; "boolean": boolean; } type UnionRecord<P extends keyof TypeMap> = { [K in P]: { kind: K; v: TypeMap[K]; f: (p: TypeMap[K]) => void; } }[P]; function processRecord<K extends keyof TypeMap>(record: UnionRecord<K>) { record.f(record.v); } processRecord({ kind: "string", v: "hello!", // 'val' раньше бы имел неявный тип - 'string | number | boolean', // но теперь это будет просто 'string'. f: val => { console.log(val.toUpperCase()); } })<p>TypeScript исправляет проблему сравнения "бесконечно" вложенных типов. Код ниже в версиях языка 4.5 и меньше позволил бы сравнить две переменные<strong>x</strong>и <strong>y</strong>, потому что TypeScript проверяет вложенность только до определённого уровня. TypeScript 4.6 научился различать такие случаи и проверять "бесконечную" вложенность.</p>
5
interface TypeMap { "number": number; "string": string; "boolean": boolean; } type UnionRecord<P extends keyof TypeMap> = { [K in P]: { kind: K; v: TypeMap[K]; f: (p: TypeMap[K]) => void; } }[P]; function processRecord<K extends keyof TypeMap>(record: UnionRecord<K>) { record.f(record.v); } processRecord({ kind: "string", v: "hello!", // 'val' раньше бы имел неявный тип - 'string | number | boolean', // но теперь это будет просто 'string'. f: val => { console.log(val.toUpperCase()); } })<p>TypeScript исправляет проблему сравнения "бесконечно" вложенных типов. Код ниже в версиях языка 4.5 и меньше позволил бы сравнить две переменные<strong>x</strong>и <strong>y</strong>, потому что TypeScript проверяет вложенность только до определённого уровня. TypeScript 4.6 научился различать такие случаи и проверять "бесконечную" вложенность.</p>
6
interface Foo<T> { prop: T; } declare let x: Foo<Foo<Foo<Foo<Foo<Foo<string>>>>>>; declare let y: Foo<Foo<Foo<Foo<Foo<string>>>>>; x = y;<p>Релиз 4.6 добавляет новый функционал для сигнатур методов. Ниже представлена функция с неопределённым количеством аргументов, но с одним изменением. Если первый переданный аргумент - строка<strong>str</strong>, то следующим аргументом должна быть переменная типа<strong>string</strong>, или если первый аргумент - строка<strong>num</strong>, то следующим аргументом обязана быть переменная типа<strong>number</strong>.</p>
6
interface Foo<T> { prop: T; } declare let x: Foo<Foo<Foo<Foo<Foo<Foo<string>>>>>>; declare let y: Foo<Foo<Foo<Foo<Foo<string>>>>>; x = y;<p>Релиз 4.6 добавляет новый функционал для сигнатур методов. Ниже представлена функция с неопределённым количеством аргументов, но с одним изменением. Если первый переданный аргумент - строка<strong>str</strong>, то следующим аргументом должна быть переменная типа<strong>string</strong>, или если первый аргумент - строка<strong>num</strong>, то следующим аргументом обязана быть переменная типа<strong>number</strong>.</p>
7
function func(...args: ["str", string] | ["num", number]) { // ... }<p>Кроме этого, TypeScript 4.6 добавляет больше синтаксических и привязочных ошибок,<a>trace analyzer</a>, проверку JavaScript-файлов на грамматические и привязочные ошибки и многое другое.</p>
7
function func(...args: ["str", string] | ["num", number]) { // ... }<p>Кроме этого, TypeScript 4.6 добавляет больше синтаксических и привязочных ошибок,<a>trace analyzer</a>, проверку JavaScript-файлов на грамматические и привязочные ошибки и многое другое.</p>
8
<p>Подробный список изменений можно посмотреть на <a>официальном блоге TypeScript</a>.</p>
8
<p>Подробный список изменений можно посмотреть на <a>официальном блоге TypeScript</a>.</p>
9
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
9
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>