网易首页 > 网易号 > 正文 申请入驻

TypeScript 4.4 正式发布

0
分享至

文 | 局长

出品 | OSC开源社区(ID:oschina2013)

TypeScript 4.4 已正式发布,开发者可通过 NuGet 或以下 npm 命令进行获取:

npm install typescript

部分更新亮点:

  • 提供针对 Aliased Conditions 的控制流分析 (Control Flow Analysis)

  • 增加 symbol 类型和模板字符串模式的索引签名

  • 在 Catch 中的变量默认为unknown(--useUnknownInCatchVariables)

  • 新增 Exact Optional Property (类型--exactOptionalPropertyTypes)

  • ClassstaticBlocks

  • 针对tsc --help的升级和改进

  • 优化性能

  • 针对 JavaScript 的拼写检查

  • Inlay Hints

  • 破坏性变化

提供针对 Aliased Conditions 的控制流分析 (Control Flow Analysis)

例子,Before typescript 4.4

function foo(arg: unknown) {
if (typeof arg === 'string') {
// We know this is a string now.
console.log(arg.toUpperCase())
}
}
function foo(arg: unknown) {
const argIsString = typeof arg === 'string'
if (argIsString) {
console.log(arg.toUpperCase())
// ~~~~~~~~~~~
// Error! Property 'toUpperCase' does not exist on type 'unknown'.
}
}

In TypeScript 4.4

function foo(arg: unknown) {
const argIsString = typeof arg === 'string'
if (argIsString) {
console.log(arg.toUpperCase())
// works just fine
}
}

可以看到,在 TypeScript 4.4 中增加了 typeof 检查,并保留了不同类型的类型保护条件。

增加 symbol 类型和模板字符串模式的索引签名

Before typescript 4.4

interface Foo {
name: string
[index: number]: unknown
// ...
}
interface Bar {
[index: string]: unknown
// ...
}
// 只支持 string 和 number

In TypeScript 4.4

现在支持索引签名类型有

  • string

  • number

  • symbol

  • template string patterns (e.g.hello-${string})

interface Foo {
[index: number]: number;
[k: `hello-${string}`]: unknown;
// ...
}
const a: Foo = {
32: 233,
'hello-name': 'xxx'
// correct
helloname: 0,
// error!
}

在 Catch 中的变量默认为unknown

从 TypeScript 4.0 开始就可以给 catch 中变量显式声明类型,通常声明为unknown是最好的做法。现在 TypeScript 4.4 默认设置为 unkown。

try {
executeSomeThirdPartyCode();
}
catch (err) { // err: unknown

// Error! Property 'message' does not exist on type 'unknown'.
console.error(err.message);

// Works! We can narrow 'err' from 'unknown' to 'Error'.
if (err instanceof Error) {
console.error(err.message);
}
}

如需开启此特性,打开 TypeScript 的 strict 模式。

新增 Exact Optional Property 类型

Before typescript 4.4

interface Person {
name: string
age?: number
}
// 等价于
interface Person {
name: string
age?: number | undefined
}
const p: Person = {
name: 'Daniel',
age: undefined, // This is okay by default.
}

默认情况下,TypeScript不区分值为 undefined 的存在属性和缺失属性。虽然这在大多数情况下都有效,但并非所有 JavaScript 代码都做出相同的假设。Object.assignObject.keys、对象展开({ ...obj })和 for-in 循环等函数和运算符的行为取决于对象上是否实际存在属性。

In TypeScript 4.4

在 TypeScript 4.4 中,新标志--exactOptionalPropertyTypes指定可选属性类型应完全按照书面解释,这意味着| undefined不会被添加到类型中:

// With 'exactOptionalPropertyTypes' on:
const p: Person = {
name: "Daniel",
age: undefined, // Error! undefined isn't a number
};

ClassstaticBlocks

代码示例

class Foo {
static count = 0;

// This is a static block:
static {
if (someCondition()) {
Foo.count++;
}
}
}

这些静态 block 允许开发者编写具有自己范围的语句序列,这些语句可以访问包含类中的私有字段。这意味着开发者可以用编写语句的所有能力来写初始化代码,不会泄漏变量,并且可以完全访问类内部。

class Foo {
static #count = 0;

get count() {
return Foo.#count;
}

static {
try {
const lastInstances = loadLastInstances();
Foo.#count += lastInstances.length;
}
catch {}
}
}

实验性的 Inlay 提示

TypeScript 正在测试编辑器对 inlay 文本的支持,这有助于在代码中内联显示有用的信息,例如参数名称。可以将其视为一种友好的“幽灵文本 (ghost text)”。

添加针对 JavaScript 的拼写建议

export var inModule = 1
inmodule.toFixed() // errors on exports

function f() {
var locals = 2
locale.toFixed() // errors on locals
}
var object = {
spaaace: 3
}
object.spaaaace // error on read
object.spaace = 2 // error on write
object.fresh = 12 // OK, no spelling correction to offer

关于此功能的详细信息查看此 PR。

详情查看 发布公告。

END

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
国乒备战名单生变,两大老将无缘!解说员:他们已经开辟新赛道

国乒备战名单生变,两大老将无缘!解说员:他们已经开辟新赛道

体育见习官
2026-01-31 16:46:17
承担输球责任!姆巴佩向高层认错,抱怨没有帮手,夏窗或开启清洗

承担输球责任!姆巴佩向高层认错,抱怨没有帮手,夏窗或开启清洗

阿泰希特
2026-01-31 11:10:39
国家下狠手了!体制内大地震,少爷、公主们的“天”,要塌了

国家下狠手了!体制内大地震,少爷、公主们的“天”,要塌了

霹雳炮
2026-01-19 22:24:13
太残暴!白银史诗级大崩盘,大v做空1天赚120万?分析师:金属盛宴结束

太残暴!白银史诗级大崩盘,大v做空1天赚120万?分析师:金属盛宴结束

金石随笔
2026-01-31 09:58:47
美翻!37岁张帅身披国旗庆祝大满贯第3冠 获主场待遇+全场喊加油

美翻!37岁张帅身披国旗庆祝大满贯第3冠 获主场待遇+全场喊加油

我爱英超
2026-01-31 11:35:09
分手14年,释小龙何洁境遇天差地别,一个身家过亿,一个养不起娃

分手14年,释小龙何洁境遇天差地别,一个身家过亿,一个养不起娃

查尔菲的笔记
2026-01-09 22:17:44
江苏省政协最新任命名单

江苏省政协最新任命名单

无线徐州
2026-01-31 15:26:12
现货白银重挫25% 现货黄金跌超10%

现货白银重挫25% 现货黄金跌超10%

财联社
2026-01-31 01:56:33
原来有这么多工作需要保密!网友:牺牲12年的爸爸竟然回来了!

原来有这么多工作需要保密!网友:牺牲12年的爸爸竟然回来了!

另子维爱读史
2026-01-16 18:29:22
今天凌晨2点,断桥上全是人!“杭州好久没下这么大的雪了……”

今天凌晨2点,断桥上全是人!“杭州好久没下这么大的雪了……”

都市快报橙柿互动
2026-01-31 09:22:59
船记不满裁判无哨看回放!美球迷直言小哈三罚毁一切:4-16崩盘

船记不满裁判无哨看回放!美球迷直言小哈三罚毁一切:4-16崩盘

颜小白的篮球梦
2026-01-31 13:14:35
永远不可能被抹杀的历史:四野部队里的那三万日籍士兵

永远不可能被抹杀的历史:四野部队里的那三万日籍士兵

深度报
2026-01-21 21:25:16
任正非没想到,高调官宣喜讯的姚安娜,竟凭一个举动再次给他长脸

任正非没想到,高调官宣喜讯的姚安娜,竟凭一个举动再次给他长脸

一娱三分地
2026-01-31 16:08:25
心梗去世逐年增多?医生:牢记“3不喝、2不吃、1坚持”,别大意

心梗去世逐年增多?医生:牢记“3不喝、2不吃、1坚持”,别大意

袁医生课堂
2026-01-24 17:33:06
日本羽毛球界再次诞生超级美少女,韩媒疯狂报道

日本羽毛球界再次诞生超级美少女,韩媒疯狂报道

随波荡漾的漂流瓶
2026-01-22 12:00:14
天津小伙接29岁离婚表嫂同居后续:表嫂正脸照流出曝更多离婚内幕

天津小伙接29岁离婚表嫂同居后续:表嫂正脸照流出曝更多离婚内幕

削桐作琴
2026-01-28 18:17:22
还是做好准备吧,一美元只能兑换5.5元人民币时代,或许终会到来

还是做好准备吧,一美元只能兑换5.5元人民币时代,或许终会到来

娱乐八卦木木子
2026-01-31 10:52:14
暴跌60%,引来全国牙科关店潮,暴利的牙科生意真的走到了尽头?

暴跌60%,引来全国牙科关店潮,暴利的牙科生意真的走到了尽头?

小熊侃史
2026-01-17 07:50:11
金晨道歉一举三得!晒脸部受伤照有玄机,3大细节对不上惹质疑!

金晨道歉一举三得!晒脸部受伤照有玄机,3大细节对不上惹质疑!

古希腊掌管月桂的神
2026-01-30 18:28:50
演员金晨道歉后,喜之郎悄悄恢复被隐藏的内容、娇韵诗微博置顶换成迪丽热巴,阿迪达斯宣布金晨仍为其代言人

演员金晨道歉后,喜之郎悄悄恢复被隐藏的内容、娇韵诗微博置顶换成迪丽热巴,阿迪达斯宣布金晨仍为其代言人

扬子晚报
2026-01-31 10:31:01
2026-01-31 17:44:49
开源中国 incentive-icons
开源中国
每天为开发者推送最新技术资讯
7577文章数 34499关注度
往期回顾 全部

科技要闻

中国车企和特斯拉的下一战,战场已定

头条要闻

正部级王祥喜任上被查 4天前曾主持会议

头条要闻

正部级王祥喜任上被查 4天前曾主持会议

体育要闻

新时代得分王!东皇37+三双刷7纪录怒吼释放

娱乐要闻

成龙入驻小红书,怼脸近照没有老年斑

财经要闻

白银,暴跌!黄金,40年最大跌幅!

汽车要闻

新款宾利欧陆GT S/GTC S官图发布 V8混动加持

态度原创

家居
亲子
旅游
健康
公开课

家居要闻

蓝调空舍 自由与个性

亲子要闻

想让孩子长高?一定要多学习山东人的这6点

旅游要闻

科技光影碰撞戏剧年味!乌镇60余项新年活动打造新春新体验

耳石症分类型,症状大不同

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版