【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

评论

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

2022-12-21:uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?

福大大架构师每日一题

Docker 云原生 k8s k3s 福大大

自动化测试技术笔记(三):如何编写技术方案

老张

自动化测试 技术方案

【JWT】jwt令牌研究

No8g攻城狮

JWT\ JWT

华为云会议,让会议更智能

秃头也爱科技

华为云桌面,为企业发展打造优质云办公环境

爱科技的水月

Verilog模块例化

二哈侠

Verilog语法 Verilog例化模块 Verilog教程

华为云桌面,一站式云上数字化创作深度解读

IT科技苏辞

华为云会议——安全得多,高效得很

秃头也爱科技

华为云会议,更专业“会”更好

秃头也爱科技

华为云桌面远程办公,真香!

爱科技的水月

阿里云香港节点全面故障给我们的启示

laofo

DevOps 研发效能 DevOps工具

头部效应明显,中小厂商「闷赚」的 Dating 赛道

融云 RongCloud

社交 虚拟

IntelliJ IDEA中我最爱的10个快捷操作

JAVA旭阳

Java IDEA

搞定 Redis 数据存储原理,别只会 set、get 了

小小怪下士

Java redis

我在编码过程使用Jenkins自动化的姿势

软件工程师-罗小东

网络安全实战之植入后门程序

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

华为云桌面Workspace,如何为用户开启全新办公模式?

爱科技的水月

华为云桌面为企业数字化发展赋能强劲动力

爱科技的水月

华为云桌面,企业云上办公为何都偏好它?

i生活i科技

HTTP的状态码

穿过生命散发芬芳

HTTP 12月月更

华为云桌面协同办公,助力建筑行业数字化转型

爱科技的水月

随时随地一键开会,华为云会议大幅提升用户开会体验

i生活i科技

华为云会议,助力企业移动办公效率提升

i生活i科技

华为云会议助力大家保险提升沟通协作效能

i生活i科技

mysql数据库运维常用的shell脚本

@下一站

12月日更 12月月更

华为云桌面之下的“冰山”:技术底座x繁荣生态加速模式进化

IT科技苏辞

华为云会议,助力企业高效办公

秃头也爱科技

数字化办公,就选流畅、清晰的华为云桌面

i生活i科技

从咖啡馆到世界,共赴下一个十年|写在EMQX开源十周年

EMQ映云科技

GitHub 开源 IoT emqx 12 月 PK 榜

对比PyTorch、TensorFlow、JAX、Theano,我发现都在关注两大问题

OneFlow

人工智能 深度学习 函数转换

【Spring专题】「开发指南」夯实实战基础功底之解读logback-spring.xml文件的详解实现

洛神灬殇

spring logback 12月日更 12 月 PK 榜

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