写点什么

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

评论

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

加快布局区块链技术发展,助力网络强国建设

CECBC

区块链

2021年美团/字节跳动/腾讯面经总结:互联网工程师必备的面试1000题

比伯

Java 编程 程序员 架构 面试

面试系列二:精选大数据面试真题JVM专项-附答案详细解析

五分钟学大数据

大数据 28天写作 3月日更

谁才是一级方程式赛车中的最强车手?

亚马逊云科技 (Amazon Web Services)

#滴滴夜莺# Nightingale & Prometheus

漂洋散人

环信大学 | 构建一套适合微服务的高可用架构

DT极客

数据库周刊59丨GaussDB(for openGauss)开放商用;人大金仓保障冬奥会演练顺利完成;MDL锁导致的MySQL问题分析;PG日志使用手册;达梦表空间查询;数据库笔试题面试题集……

墨天轮

MySQL 数据库 程序员 运维 postgre

真实字节二面:什么是伪共享?

艾小仙

Java 程序员 字节跳动 面试

java学习笔记(一)

陈皮

Java

别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境(2021最新攻略)

刘悦的技术博客

ruby ruby-on-rails rubygems macOS Big Sur m1

图解CyclicBarrier运动员接力赛

叫练

面试 AQS CyclicBarrier

敏捷, 是一种信仰

boshi

敏捷 七日更 28天写作

七种分布式事务的解决方案,一次讲给你听

moon聊技术

「两次遍历」要比「一次遍历」要慢 ... 为啥呀?为啥呀??

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

前端上手Docker超详细基础教程

1024肥宅

Docker Linux 大前端 jenkins CI/CD

javascript中的内存管理

程序那些事

JavaScript nodejs 内存管理 程序那些事

「产品经理训练营」作业 05:知识星球加入星球流程图

狷介

产品经理训练营

一线互联网大厂面经分享:阿里三面+头条四面+腾讯二面+美团四面

Java架构之路

Java 程序员 架构 面试 编程语言

SQL Server 多表数据增量获取和发布 2.1

happlyfox

28天写作 3月日更

代码从业者

ES_her0

28天写作 3月日更

星环科技Sophon Edge边缘计算平台持续赋能千家万业

星环科技

产品经理训练营 - 第四章作业 (二)

joelhy

产品经理训练营

打破垄断 上海发布自主研发树图区块链重大成果

CECBC

区块链

(28DW-S8-Day10) T型学习模式:迁移式学习

mtfelix

T型人才 28天写作 迁移学习 一万小时定律

Docker 常用命令,还有谁不会?

xcbeyond

Docker 常用命令 28天写作

这个新春,你的云端安全守卫来咯 | 新服务上线

亚马逊云科技 (Amazon Web Services)

四面美团开发岗,成功斩获offer,分享个人面经

Java架构之路

Java 程序员 架构 面试 编程语言

想做技术自媒体实现财富自由?先看看广告报价吧,无编码学爬虫之二。

梦想橡皮擦

Python 28天写作 2月春节不断更 3月日更

手写一个LRU缓存淘汰算法

Simon郎

Java 大数据 缓存 LRU 数据结构与算法

VR,正在上演一出“风月宝鉴”

脑极体

SuperBenchmarker sb在mac上的安装手记

edd

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