写点什么

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:003825

评论

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

可制造性拓展篇│HDI(盲、埋孔)板压合问题

华秋电子

HDI

出版行业企业如何快速实现数智化转型?

用友BIP

Fast by BIP 出版行业

【华秋商城】海量现货库存 闪电发货

华秋电子

连接器

Flink测试利器之DataGen初探 | 京东云技术团队

京东科技开发者

大数据 测试 flink sql 执行过程 企业号10月PK榜 DataGen

数据如何同步到云服务器

天翼云开发者社区

云计算 数据迁移

MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队

京东科技开发者

MySQL 数据库 索引 企业号10月PK榜

EVE-NG初次启动及WEB客户端访问

小魏写代码

FinClip小程序技术,加速国产化应用新进程

FinClip

负载均衡详解

天翼云开发者社区

负载均衡 服务器

Trino容错模式深度测评与思考

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 交互式分析

以效率为导向:用ChatGPT和HttpRunner实现敏捷自动化测试(二) | 京东云技术团队

京东科技开发者

自动化测试 敏捷测试 HttpRunner ChatGPT 企业号10月PK榜

使用eBPF加速阿里云服务网格ASM

阿里巴巴云原生

阿里云 云原生 服务网格

从原理到实战,详解XXE攻击

华为云开发者联盟

安全 后端 华为云 华为云开发者联盟

淘天集团大模型应用十大挑战命题发布

阿里技术

AI 校招 AIGC 淘天

软件测试/测试开发丨Python闭包与装饰器 学习笔记

测试人

Python 程序员 软件测试 自动化测试 测试开发

用友战略签约广联达,共同使能建筑行业企业高质量发展

用友BIP

建筑行业

使用 GitHub Action 自动更新 Sealos 集群的应用镜像

硅基新手村

云原生 #go

开放原子开源基金会联合主办的2023 CCF中国开源大会即将开幕

开放原子开源基金会

开源 CCF

云网络对等连接产品的高可用保证

天翼云开发者社区

网络 对等连接

战略引领 注重实绩 形成闭环——中国交建绩效管理创新与数智化实践

用友BIP

绩效管理

火山引擎DataTester:跨境电商网站,如何快速实施AB测试 ?

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长 企业号10月PK榜

如何强制SQL走性能更优的hash join

华为云开发者联盟

数据库 sql 后端 华为云 华为云开发者联盟

户外裸眼3D屏幕合适用什么规格

Dylan

3D LED显示屏 户外LED显示屏 led显示屏厂家

当HTAP已成标配,什么才是制胜关键?

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

校源行丨开放原子开源基金会赴北京信息科技大学走访交流

开放原子开源基金会

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