AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

评论

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

万字长文!教你如何拆解一款 App

产品海豚湾

产品经理 产品设计 竞品分析 B端产品 9月月更

关于CMDB建设思路的一点思考

穿过生命散发芬芳

CMDB 9月月更

单链表头插法,尾插法,循环链表,(线性表单链表)

IC00

c 链表 数据结构, 9月月更

编排流程/规则,编排本身也需要很深的逻辑思考!

waitmoon

规则引擎使用 规则引擎 流程引擎 可视化开发

低代码探索:Java模板引擎技术

程序员架构进阶

低代码 9月日更 模板引擎 技术探索

Java进阶(十七)ArrayList与LinkedList的区别

No Silver Bullet

Java ArrayList linkedlist 9月月更

[SpringBoot系列]基础过渡与夯实(基础配置)

十八岁讨厌编程

Java 后端开发 9月月更

C++学习------csetjmp头文件的源码学习

桑榆

c++ 源码阅读 9月月更

聚簇索引与覆盖索引

急需上岸的小谢

9月月更

亮点抢先看|StarRocks Summit Asia 2022 全议程公布!

StarRocks

数据库

ChatOps新型运维协作介绍

阿泽🧸

ChatOps 9月月更

做好企业的内部知识管理的方法

Baklib

编辑FAQ常用问题网页的Tips

Baklib

测试需求平台4-Flask实现API服务入门实战

MegaQi

测试平台开发教程 9月月更

跟着卷卷龙一起学Camera--AE

卷卷龙

ISP 9月月更

SpringFramework初识

十八岁讨厌编程

spring 后端 9月月更

[MyBatisPlus]标准数据层开发(CRUD、分页)

十八岁讨厌编程

Java 后端开发 9月月更

系统设计 - 高可用思想简介

三叶草

高可用 SLA 高可用设计

【JS】DOM键盘事件--div元素-设置键盘事件--失效的额外处理踩坑

Sam9029

JavaScript DOM 9月月更 键盘事件

【vue3】vue3-组合式API中实现深拷贝

Sam9029

Vue 深拷贝 9月月更

【C语言深度剖析】你真的懂C语言中的位操作符吗?

Albert Edison

C语言 9月月更 位移操作符 按位与 按位或

走向云原生数据库,告别 Microsoft SQL Server,迎接 Babelfish

亚马逊云科技 (Amazon Web Services)

数据库 云原生

【从零开始学爬虫】采集谷歌网页列表数据

前嗅大数据

大数据 数据采集 爬虫软件 爬虫教程 互联网+

做好产品手册,发现优质顾客

Baklib

系统实战-逻辑多租服务的高并发调优

三叶草

性能优化 高性能,

挑战30天学完Python:Day2 夯实基础-变量和内置函数

MegaQi

9月月更 挑战30天学完Python

车载生态安全怎样靠小程序技术运转

Geek_99967b

小程序 车联网

2022-09-13:给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。 同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei] 表示你可以

福大大架构师每日一题

算法 rust 福大大

【计算机网络原理】第三章 传输层

前端小刘不怕牛牛

TCP 计算机网络 HTTP 9月月更

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