写点什么

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

评论

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

让AI来帮你看看,五行缺啥

FN0

AIGC

不学血亏!手把手教会你推特视频如何下载到手机相册~

frank

软件测试 | 性能测试管理障碍

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

测试

低代码开发将彻底颠覆编程行业!你还需要学习编程吗?

不在线第一只蜗牛

低代码 数字化 低代码开发

不错的IT项目管理系统有哪些?对比2023年最受欢迎的8款项目管理工具

爱吃小舅的鱼

PingCode 项目管理软件

软件测试 | 性能测试实施流程

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

测试

Flyway:简化数据迁移以适应敏捷开发

inBuilder低代码平台

低代码工具浅析

互联网工科生

软件开发 低代码 JNPF

从两个案例看Apache Flink如何提升企业实时数据处理效率

xfgg

Java flink 6 月 优质更文活动

数字化转型与架构|开篇

数字随行

架构 数字化转型

关于AI我们唯一确定知道的是…

FN0

AIGC

企业如何提高全面提升预算管理效率?

用友BIP

全面预算

Hibernate5 动态模型

alexgaoyh

hibernate jpa 动态模型 运行时 sessionfactory

传统全面预算管理体系暴露的问题

用友BIP

全面预算

软件测试/测试开发丨用户端Web自动化测试学习笔记

测试人

Python 程序员 软件测试 学习笔记 web自动化

Spring事务优化解析:实现高效率、高并发、低失效的全新策略

xfgg

spring 事务 6 月 优质更文活动

机器视觉在自动驾驶应用有什么

来自四九城儿

音视频开发进阶|第七讲:分辨率与帧率·下篇

ZEGO即构

直播 分辨率 视频 RTC 帧率

低代码平台的实现原理

互联网工科生

软件开发 低代码 JNPF

提升网站速度的秘密武器:国外主机的优势解析!

一只扑棱蛾子

国外主机

自动驾驶优缺点都有什么

来自四九城儿

软件测试 | 性能调整基础

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

测试

数学学渣能掌握大语言模型技术吗?

FN0

AIGC

中企出海之营销最佳实践——新加坡SK集团

用友BIP

中企出海

【Netty】「优化进阶」(三)Netty 通信协议设计:从 Redis、HTTP 和自定义协议看起

sidiot

Java 后端 Netty 6 月 优质更文活动

【网络安全】浅谈数据库攻击复现及相关安全优化

sidiot

MySQL 网络安全

程序员这种巫师职业即将消失

FN0

AIGC

让你彻底掌握Less的基础,介绍得清晰易懂!

Apifox

程序员 前端 开发 less

从辅助驾驶到自动驾驶道路还很远

来自四九城儿

【Netty】「优化进阶」(二)浅谈 LengthFieldBasedFrameDecoder:如何实现可靠的消息分割?

sidiot

Java 后端 Netty 6 月 优质更文活动

一种很新的交互式智能标注技术

澳鹏Appen

人工智能 交互 数据标注 智能标注 交互式标注

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