TYPESCRIPT中文教程基础部分下----翻译自TS官方
type 别名
我们已经使用过 object 和 联合的方式 直接声明类型。但是某个类型在使用多次的情况下就要用到别名了。
别名的语法就像是在定义一个具名的对象一样:
type Point = {
x: number;
y: number;
}
function printCoord(pt: Point) {
console.log(pt.x);
console.log(pt.y);
}
printCoord({ x: 100, y: 100 });
定义一个别名不仅仅可以是对象的形式,还可以是其他形式,比如联合类型
type ID = number | string;
别名仅仅只是个别名,你不能使用一个别名再去创建一个不同版本的别名但却表达同样的类型。如果你使用一个别名继续创建另一个别名,这件事就是一种重复劳动没有意义,即使能正常运行。
所以不要这样定义:
type userString = string
interfaces 接口 :是另一种用来声明 object type 的类型
interface Point {
x: number;
y: number;
}
用法不变
function printCoord(pt: Point) {
console.log(pt.x);
console.log(pt.y);
}
printCoord({ x: 100, y: 100 });
这样看起来和上面的别名是一样的,ts 只关心入参的结构是否和定义的类相匹配。但是和别名也有不同之处:
在大部分情况下别名和接口都可以选择,但是别名一旦创建后就不能再添加新的属性了,
接口是可以拓展的:接口既可以新增属性名称也可以通过 extends 进行拓展。
| interface 接口 | type 别名 |
|
interface Animal { interface Animal { legs: number |
type Animal = { type Animal = { //报错:声明重复 |
| interface Bear extends Animal { honey: boolean } |
type Bear = Animal & { honey: boolean } |
| 接口通过 extends 进行拓展 | 类别名通过相交进行‘拓展’ |
类型断言
有时某个值的类型信息是ts不知道的。比如你使用 document.getElementById,ts 仅仅知道返回 HTMLElement 类型,
如果在你的页面中通过ID可以获取一个 HTMLCanvasElement,在这种情况下,可以使用类型断言指定更具体的类型。
例如:
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;
字面量类型
在ts中声明一个变量,ts会根据初始值自动判断变量的类型,例如:
let changingString = 'Hello World'
changingString = 'Bowen'
changingString = 124
直接声明一个字面量的类型是没有多大意义的,因为这样导致变量只能有唯一的值,例如:
let x: 'text' = 'text'
x = 'text'
x = 'test'
但是将字面量与联合类型相结合,便可以表达出更有用的类型,比如一个方法仅仅接收一系列预设的值:
function printText(s: string, alignment: "letf" | "right" | "center") { ... }
printText("boy", "right")
printText("boy", "top")
当然了这种结合可以多种类型互相配合的:
TYPESCRIPT中文教程基础部分下----翻译自TS官方的更多相关文章
- TypeScript中文教程基础部分上----翻译自TS官方
为什么使用TS? js中每一个值在不同的操作运行中表现出一系列不同的行为,比如说下面这个例子: message.toLowerCase();message(); 逐行看下,第一行调用了message的 ...
- TypeScript 中文教程之缩小----部分翻译自TS官方
Narrowing概念:字面意思是缩小,可以理解为细化或者您觉得更好的代名词. TS官方在这里做了很详细的说明,文字较多,简单以图片概括: typeof type guards 类型防护过程,可以通 ...
- 转载:《TypeScript 中文入门教程》
缘由 事情是这样的,我想搜索 TypeScript 中文教程,结果在 https://www.baidu.com , https://cn.bing.com ,上都找不到官方的翻译,也没有一个像样的翻 ...
- 转载:TypeScript 简介与《TypeScript 中文入门教程》
简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...
- 【转】TypeScript中文入门教程
目录 虽然我是转载的,但看在Copy这么多文章也是很幸苦的好吧,我罗列一个目录. 转载:<TypeScript 中文入门教程> 17.注解 (2015-12-03 11:36) 转载:&l ...
- CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium
CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报 分类: CEF(2) 目录(?)[+] ...
- 《TypeScript 中文入门教程》
转载:<TypeScript 中文入门教程> 17.注解 (2015-12-03 11:36) 转载:<TypeScript 中文入门教程> 16.Symbols (2015- ...
- 【HttpClient4.5中文教程】【第一章 :基础】1.1运行请求(二)
很多其它HttpClient4.5中文教程请查看:点击打开链接 ==================================================================== ...
- 手把手0基础Centos下安装与部署paddleOcr 教程
!!!以下内容为作者原创,首发于个人博客园&掘金平台.未经原作者同意与许可,任何人.任何组织不得以任何形式转载.原创不易,如果对您的问题提供了些许帮助,希望得到您的点赞支持. 0.paddle ...
随机推荐
- 机器学习算法中的评价指标(准确率、召回率、F值、ROC、AUC等)
参考链接:https://www.cnblogs.com/Zhi-Z/p/8728168.html 具体更详细的可以查阅周志华的西瓜书第二章,写的非常详细~ 一.机器学习性能评估指标 1.准确率(Ac ...
- Go语言核心36讲(Go语言实战与应用二十四)--学习笔记
46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...
- 资源的批量删除与替换(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 资源分配好以后,嗯,很满意! 可是!有人看了不满意,或者自己手贱分配错了,要改? 改就改呗,和分配有什么区别吗? 没有啊! ...
- .net 6 (.net core) 发布到linux docker中
第一步:VMware 安装 虚拟机Linux系统,本文以 CentOS 为例 .
- 嵌入式实验一:LED灯点亮
实验一:LED灯程序 一. 实验环境 开发机环境 操作系统:ubuntu 12.04 交叉编译环境:arm-linux-gcc 4.3.2 6410板子内核源码:linux-3.0.1 目 ...
- 七种可能 | Linux丢包故障的定位与解决
出处[云英公众号]:https://mp.weixin.qq.com/s?__biz=MzI1NzM3NTYxMw==&mid=2247483685&idx=1&sn=95c8 ...
- nginx配置文件简析
https://blog.csdn.net/wangbin_0729/article/details/82109693 #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相 ...
- 实体转为json的,如何处理外键情况
实体转为json的,如何处理外键情况 jc.registerJsonValueProcessor(Userrelation.class, new JsonValueProcessor() {// 此处 ...
- JAVA将一个pdf按页码拆分成多个pdf
引入maven <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf< ...
- c++之可变参数格式化字符串(c++11可变模板参数)
本文将使用 泛型 实现可变参数. 涉及到的关见函数: std::snprintf 1.一个例子 函数声明及定义 1 // 泛型 2 template <typename... Args> ...