写点什么

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

评论

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

逻辑多租场景下,故障爆炸半径的控制实践

华为云开发者联盟

开发 华为云 华为云开发者联盟

低代码:万事俱备,就差一个程序员

互联网工科生

软件开发 低代码 JNPF

测试开发 | 人工智能引领交通运输革命

测吧(北京)科技有限公司

测试

openEuler汇聚开源力量,共建全球开源生态

彭飞

倒计时2天|2023开放原子开发者大会15个技术平行专场议程速览

开放原子开源基金会

开源

铸就安全可信的数字化「信息枢纽」—华为云ROMA Connect荣膺软件产品可信【卓越级】认证

云计算 华为云

长三角安防行业盛会“2024杭州国际安防产品展览会”

AIOTE智博会

安防展 杭州安防展 安防产品展

分享一些很优秀的URL设计

伤感汤姆布利柏

测试开发 | 语言助手技术的发展历程

测吧(北京)科技有限公司

测试

测试开发 | AI在交通运输中的引领作用:智能交通系统与城市流动

测吧(北京)科技有限公司

测试

Lazada商品评论列表API:电商行业的实时反馈宝库

Noah

全方位的账号安全管理

尚思卓越

黑客 网络安全

Cloudeye对接Prometheus实现华为云全方位监控

华为云开发者联盟

云计算 华为云 华为云开发者联盟 华为云弹性云服务器

【第七在线】季节性商品计划:如何应对时尚行业的快速变化

第七在线

云技术分享 | 使用快照和 AMI 镜像进行 Amazon EC2 的备份和恢复

亚马逊云科技 (Amazon Web Services)

Amazon EC2 Amazon S3 amazon-ebs backup

测试开发 | 智能系统在航空航天领域的应用与创新

测吧(北京)科技有限公司

测试

【第七在线】供应链协作与商品计划:建立强大的合作关系

第七在线

软件测试/测试开发丨Python元组

测试人

Python 软件测试

2023开放原子开发者大会全日程

开放原子开源基金会

开源

科普:多领域分布式协同仿真

DevOps和数字孪生

协同仿真

数据库系列:业内主流MySQL数据中间件梳理

不在线第一只蜗牛

MySQL 数据库 数据

AGI时代的奠基石:Agent+算力+大模型是构建AI未来的三驾马车吗?

GPU算力

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

Authing

制造业 先进制造 国产化替代 身份自动化

诚邀报名|探索汽车智能化的开源未来

开放原子开源基金会

开源

「大模型摇摇乐」狂欢落幕!盘点那些让你意想不到的应用集锦

飞桨PaddlePaddle

开发者 大模型 AI应用 文心一言

测试开发 | 语音助手技术:Siri、Alexa、Google Assistant的背后

测吧(北京)科技有限公司

测试

字节跳动 Spark Shuffle 大规模云原生化演进实践

字节跳动云原生计算

大数据 spark 云原生

大数据,领导者阵营!

腾讯云大数据

大数据

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