2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

TypeScript 1.8 新功能:模块扩充

  • 2016-05-25
  • 本文字数:1232 字

    阅读完需:约 4 分钟

TypeScript 是微软开源的一个 JavaScript 的超集。近日,TypeScript 发布了 1.8 稳定版本。

继上个月 Beta 版本发布 之后,微软项目经理 Bowden Kelly 这次在博文 TypeScript 1.8 版本发布 中宣布:基于新增的代码集成功能(在 TypeScript 项目中使用 JavaScript 代码),最新版本现在“完全支持模块扩充了”。

用 Kelly 的话具体来说,这可以“让用户通过模块扩充来设计更加模块化的组件”,帮助他们扩展已有的模块,并在“引入整个模块或部分模块”上自由选择。这可以通过声明引入附加模块来实现,具体的类型扩展工作则在附加模块中完成。

这里是 Kelly 提供的例子:

复制代码
// 基类所在的文件 scale.ts
export class Scale {
weightOnEarth(mass) {}
}
// 附加模块 advancedScale.ts
import { Scale } from "./scale" ;
// 扩充 Scale 类
declare module "./scale" {
// 通过新的接口描述来扩充引入的基类
interface Scale {
weightOnMoon(mass); // 不是所有人都需要月球上的重力
}
}
Scale.prototype.advancedMethod = /* 具体实现略去 */;
// consumer.ts
import { Scale } from "./scale";
import "./advancedScale";
let scale: Scale;
scale.weightOnMoon(10); // 现在可以用了!

去年九月的 1.6 Beta 版本中,微软首次支持了 React。这次,1.8 稳定版本简化了使用 React 时对 props 类型的声明。

简要地说,现在开发者不再需要显式声明 refkey 或者扩展 React.Props 了,refkey 属性可以在所有组件上表现出正确的类型,同时 ref 也会在无状态函数组件中被正确地禁用。

1.8 版本还改善了联合 / 交叉接口。例如,从 string | string[] 推导 string | T 时,后者会被拆解为 string[]T,于是 string[] 就可以推导为 T 了,如下所示:

复制代码
type Maybe<t> = T | void;
function isDefined<t>(x: Maybe<t>): x is T {
return x !== undefined && x !== null;
}
function isUndefined<t>(x: Maybe<t>): x is void {
return x === undefined || x === null;
}
function getOrElse<t>(x: Maybe<t>, defaultValue: T): T {
return isDefined(x) ? x : defaultValue;
}
function test1(x: Maybe<string>) {
let x1 = getOrElse(x, "Undefined"); // 字符串
let x2 = isDefined(x) ? x : "Undefined"; // 字符串
let x3 = isUndefined(x) ? "Undefined" : x; // 字符串
}
function test2(x: Maybe<number>) {
let x1 = getOrElse(x, -1); // 数值
let x2 = isDefined(x) ? x : -1; // 数值
let x3 = isUndefined(x) ? -1 : x; // 数值
}
</number></string></t></t></t></t></t></t></t>

关于 TypeScript 1.8 带来的种种改善与变化的完整细节,敬请参阅它的 GitHub 页面

查看英文原文: TypeScript 1.8 Brings Module Augmentation Support


感谢丁晓昀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-25 19:003775

评论

发布
暂无评论
发现更多内容

基于 Databend 的实时数据汇聚平台建设

Databend

拥抱AI生产力,天润融通致敬每一位AI的老师

天润融通

当智能机器人说”黑哥们语言是不通的“,作为开发者的你该如何应对?

老纪的技术唠嗑局

插件 #OceanBase 向量化

企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

低代码正在悄悄颠覆企业数字化

伤感汤姆布利柏

一文读懂电子看板管理:生产看板到底管什么?看什么?

万界星空科技

制造业 mes 可视化数据 电子看板 数字大屏

以太坊ABI解析器零尺寸类型漏洞分析与利用

qife122

区块链 以太坊

新签约 | Oracle 慢到拖垮查询?江西水投换上 TDengine 时序数据库秒回实时监控

TDengine

tdengine 时序数据库 国产时序数据库

MyEMS与开源浪潮:如何重塑全球能源管理的未来格局

开源能源管理系统

开源 能源管理系统

GOSIM HANGZHOU 2025即将揭幕,华为云云原生团队精彩议题抢鲜

华为云原生团队

云计算 容器 云原生 Volcano kubeedge

查收你的技术成长礼包

京东零售技术

爱玛集团:All In SelectDB 构建极速统一数据平台,领航 AI 数智化实践

SelectDB

人工智能 数据库 实时数仓 MCP 爱玛电动车

阿里云可观测 2025 年 8 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

还停留在批处理时代吗?增量计算架构详解

tapdata

批处理 变更数据捕获 金融实时数据处理 增量计算 CDC,流处理

AI搜索的黑科技?DeepSearch 究竟“深”藏着什么秘密?

阿里云大数据AI技术

阿里云 OpenSearch DeepSearch

Comate Agents成团出道,来Pick你的最强C位!

Comate编码助手

前端 Agents Agentic AI vibe coding

服装智能制造软件平台(源码+文档+讲解+演示)

深圳亥时科技

开源‘

欲穷千里目,它凭什么能问鼎存力之巅?

脑极体

AI 存储

flink on k8s的基本介绍

天翼云开发者社区

大数据

活动预告|天润融通走进亚马逊云科技,用Agent打造客户服务新型竞争力

天润融通

Flink 与Flink可视化平台StreamPark教程(时间相关 1)

天翼云开发者社区

大数据 flink 计算

MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来

开源能源管理系统

开源 能源管理系统

重塑云上 AI 应用“运行时”,函数计算进化之路

阿里巴巴云原生

阿里云 云原生 函数计算

向量检索技术优化步骤详解——游戏公司智能客服与推荐系统落地OceanBase

老纪的技术唠嗑局

游戏 #OceanBase 向量化

开源能源管理系统的进击:从“免费替代”到“创新引擎”

开源能源管理系统

开源 开源能源管理系统

时序数据库 Apache IoTDB V1.3.5 发布|优化加密算法,优化内核稳定性,修复社区反馈问题

Apache IoTDB

Mem0 + Milvus:为人工智能构建持久化长时记忆

阿里云大数据AI技术

阿里云 AI 检索 Milvus Mem0

网易伏羲亮相Arm Unlocked 2025,携手Arm探索中国人工智能创新之路

网易伏羲

人工智能 arm 网易伏羲 游戏AI 永劫无间

Flink 与Flink可视化平台StreamPark教程(CDC功能)

天翼云开发者社区

大数据 flink

TypeScript 1.8 新功能:模块扩充_JavaScript_James Chesters_InfoQ精选文章