写点什么

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

评论

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

动态化-罗码(京东科技一码多端解决方案)介绍

京东科技开发者

网站访问分析30分钟实战指南:ClkLog开源社区版

ClkLog

开源 埋点 sdk 用户行为分析 画像

白鲸开源斩获「创业新星企业奖」,双开源项目同步摘奖!

白鲸开源

数据库 大数据 开源 DataOps 白鲸开源

数字揭秘丨什么?!Altair EDEM竟然可以用来解答高考物理压轴的电磁力学题?

Altair RapidMiner

AI 制造业 电磁仿真 EDEM 离散元仿真

数字金融的产业界共识,为什么是存算分离?

脑极体

AI

注塑行业MES系统解决方案:全面指南与最佳实践

万界星空科技

制造业 mes 万界星空科技mes 注塑MES 注塑行业

如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件

京东科技开发者

新《公司法》实施周年实务挑战加剧,Alpha系统「公司法专题库」破解律师专业升级困局

科技汇

可观测领域的王者Dynatrace的故障定位能力验证

乒乓狂魔

可观测性 故障定位 AIOPS

政务一体化平台的小程序化构建路径:生态融合驱动下的数字化转型创新实践

xuyinyin

CAD图纸填充不完整是怎么回事?快试试这种方法!

在路上

cad cad看图

通义灵码2.5 | 一个更懂开发者的 AI 编程助手

阿里巴巴云原生

阿里云 通义灵码

通义灵码2.5 | 一个更懂开发者的 AI 编程助手

阿里云云效

阿里云 通义灵码

时序数据库 TDengine × Looker Studio:不懂设计也能做出高颜值报表

TDengine

tdengine 数据分析 可视化 时序数据库 时序数据库tdengine

告别SQL卡顿与混乱!AI如何赋能实时计算?

袋鼠云数栈

数据库 sql 数据治理 数据平台 数据管理

Nextcloud AIO - 一站式自托管Nextcloud解决方案

qife

Nextcloud 自托管

Java的SPI机制详解

京东科技开发者

屏蔽海外流量是什么意思

网络安全服务

CDN 防火墙 waf DDoS 攻击 海外IP

低成本创业新方向:使用现成源码搭建游戏陪玩小程序平台

DUOKE七七

MySQL uniapp thinkphp

捷途汽车6月销售汽车55741辆,上半年累销突破299368辆

科技热闻

好消息!Apache DolphinScheduler 荣获上海上海菁英荟优秀开源项目奖

白鲸开源

大数据 开源 Apache DolphinScheduler 上海 大数据调度

搭建Coze扣子文档智能问答Bot工作流,保姆级教程来了!

合合技术团队

人工智能 算法 #大数据

MyEMS能源管理系统后台配置-协议

开源能源管理系统

开源 能源管理

分布式集群中雪花ID重复?三招教你彻底避坑!实战经验+解决方案

Geek_e3e86e

Java 编程

360度全方位了解堡垒机作用-行云管家

行云管家

网络安全 数据安全 堡垒机

基于华为开发者空间 - 开发平台,构建AI会议助手

华为云开发者联盟

welink 华为云FunctionGraph 华为开发者空间 MCP Server

淘宝图搜接口功能解析,精准搜索相似商品

tbapi

淘宝图片搜索接口 淘宝拍立淘接口 淘宝图片api

MyEMS能源管理系统后台配置-网关管理

开源能源管理系统

开源 能源管理

等保测评公司是干什么的?哪里可以查到?

行云管家

等保 等保测评

医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书

ModelWhale

白皮书 医学+AI 南方医科大学

喜讯!Apache SeaTunnel 荣获上海开源创新菁英荟优秀开源项目奖

白鲸开源

开源 ETL 数据集成 Apache SeaTunnel 上海

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