写点什么

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

评论

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

阿里架构师自爆“面试指南(泰山版)”所有的成功都不是白给的

Java架构师迁哥

实现高性能MySQL,深入探索数据库索引

奔着腾讯去

数据库 数据库事务 innodb 索引 MySQL 高可用

程序员应该多久跳一次槽?怎样跳槽才是正确的跳槽?

Java架构师迁哥

新垣结衣嫁了个“非典型性”程序员

小智

程序员 软件开发 日本

嵌入式系统降低功耗的设计技术

不脱发的程序猿

嵌入式设计 嵌入式系统 低功耗

细节爆炸!阿里架构师总结出:共计23版块Java架构师“成长笔记”

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

程序员兼职网站推荐~

MY

浅谈虚拟偶像背后的舞蹈生成

行者AI

人工智能

只有程序猿才能看懂的520内涵表白

三掌柜

520 520单身福利 520 单身福利

一周信创舆情观察(5.10~5.16)

统小信uos

做了一个开源的在线互动教室,想分享给大家

千竹

开源 WebRTC 在线教育 在线课堂 互动白板

OCR性能优化:从认识BiLSTM网络结构开始

华为云开发者联盟

OCR Seq2Seq BiLSTM 网络结构 OCR网络

浅析决策树的生长和剪枝

华为云开发者联盟

数据 决策树 预测模型 剪枝 过拟合

Matlab制作视频并转换成gif动态图的方法

格致君的planB

马斯克会在熊市周期里瞄准下一个百倍币么?

猫Buboo

区块链 狗狗币

作为骨灰级MEME项目,Grin接下来会走向何方?

猫Buboo

项目开发中ARM单片机芯片分类及选型

不脱发的程序猿

嵌入式 ARM单片机 ARM芯片分类及选型 单片机选型

GO语言平均薪资为什么比Java高?

Java架构师迁哥

张一鸣退隐江湖

池建强

字节跳动 张一鸣

云小课 | 玩转HiLens Studio之手机实时视频流调试代码

华为云开发者联盟

华为 华为HiLens HiLens Studio EI智能体 实时视频

2021年10年后端开发程序员最新《C/C++Linux 服务器开发》学习路线总结,建议收藏

奔着腾讯去

学习 服务器集群 Linux服务器开发 C++后台开发

PCB天线无线模组如何布局摆放?

不脱发的程序猿

物联网 嵌入式设计 PCB天线无线模组 无线模组布局摆放 PCB产品

人人矿场提供真实稳定算力,形成全球分布式算力供给网络

DT极客

大厂面试题之计算机网络重点篇(附答案)

linux大本营

c++ Linux 网络协议 udp TCP/IP

花重金购买的“Java面试知识点”真香,知彼知己,百战不殆

Java架构师迁哥

【建议收藏】B站上有哪些值得反复观看的Java视频教程?

格致君的planB

省钱、省时、省力的音视频通信服务

anyRTC开发者

音视频 WebRTC 云服务 RTC

视频分割修整功哪一款视频剪辑软件更好用?

奈奈的杂社

短视频 视频剪辑 视频处理 视频制作

520到了,吟湿几首

花花

520 520单身福利 520 单身福利

仅需几行代码轻松实现第一人称行走

ThingJS数字孪生引擎

大前端 3D可视化 数字孪生

TypeScript 开发环境搭建

Emperor_LawD

typescript ts 520单身福利 520 单身福利

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