1、原始数据类型
JavaScript 的类型分为两种:原始数据类型和对象数据类型。原始数据类型包括布尔值、数值、字符串、null、undefined 以及 ES6 中的 Symbol。
前五种数据类型在 TypeScript 中的应用。
注意布尔值:在 JavaScript 中,boolean 是一种基本的数据类型,Boolean 是一个将布尔值打包的布尔对象。在 TypeScript 中,boolean 也是基本数据类型,但是 Boolean 是构造函数。
2、在 TypeScript 中:
* 二进制或八进制表示的数字会被编译成十进制。
* 可以用 void 表示没有返回值的函数。
* 任意值(Any)用来 表示允许赋值为任意类型。在任意值上可以访问任何属性和方法。未指定类型的无初始值的变量会被识别为任意值。
* 联合类型(使用 | 分隔)表示取值可以为多种类型中的一种。当 ts 不确定一个联合属性的变量是哪个类型的时候,只能访问联合类型里的共有属性和方法。
3、对象的类型——接口
接口名一般首字母大写
<template>
interface InterfaceName {
readonly propName: type; // 用 readonly 定义只读属性
propertyName1: type1; // : 表示该属性必需
propertyName2?: type2; // ?: 表示该属性可选
[propertyName: type]: any; // 任意属性
}
注:一旦定义了任意属性,那么确定属性和可选属性都必须是它的子属性。
4、数组的类型
(1) 类型+方括号 表示法
let fibonacci: number[] = [1, 1, 2, 3, 5];
(2) 数组泛型 Array<elemType>
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
(3)用接口表示数组
interface NumberArray {
[idnex: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5]
(4)any 在数组中表示允许出现任意类型
let list: any[] = ['Xcat Liu', 25, {website: 'http://xcatliu.com'}]
(5)类数组
5、函数的类型
JS 中函数声明的方式有:函数声明和函数表达式。
TS 中,要对函数的输入输出有约束
(1)函数声明:
function sum(x: number, y: number): number {
return x + y;
}
(2)函数表达式:
let sum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
}
在 TypeScript 中,=> 用来表示函数定义,左边是输入类型,右边是输出类型,不同于 ES6 中的箭头函数(=>)。
(3)用接口定义函数
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
return source.search(subString) !== -1;
}
(4)参数中的可选参数表示方式和接口中的可选属性类似,可选参数必须放在参数列表的最后一项
function bulidName(firistName: string, lastName?: string) {
if (lastName) {
return firistName + ' ' + lastName;
} else {
return firistName;
}
}
TS 中,添加了默认值的参数会被识别为可选参数,此时不受放置位置限制
剩余参数可用 ...rest 表示,rest 参数只能是参数列表中的最后一项
(5)断言类型:常用于联合类型
语法:<type>value 或 value as type
function getLength(something: string | number):number {
if (<string>something.length) {
return <string>something.length;
} else {
return something.toString().length();
}
}
断言不是类型转换,不能将变量断言成一个联合类型中不存在的类型。
6、类型别名:用 type 创建类型别名,常用于联合类型
type Name = string;
type Nameresolver = () => string;
type NameOrResolver = Name | NameOrResolver;
function getName(n: NameOrResolver): Name{
if (typeof n === 'string') {
return n;
} else {
return n();
}
}
7、字符串字面量类型:用来约束取值只能是某几个字符串中的一个
8、元组:合并了不同类型的对象
可以对元组中的某一项进行赋值,若直接对元组类型的变量进行初始化或者负值,需要提供所有元祖类型中指定的项。
当赋值给越界的元素时,越界元素的类型会被限制为元组中每个类型的联合类型。
9、枚举(enum):枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射。
枚举项可以包含常数项和计算所得项。
常数枚举:使用 const enum 定义枚举类型,会在编译阶段被删除,且枚举项不能包含计算所得项。
外部枚举:使用 declare enum 定义枚举类型,常出现在声明文件中。
10、类
ES6 中的类 -- 通过 new 生成新实例的时候,会自动调用构造函数;使用 extends 关键字实现继承,子类中使用 super 关键字来调用
TypeScript 中类的用法:
(1)访问修饰符:public、private 和 protected
private 修饰的属性或方法,在子类中也是不允许访问的;
protected 修饰的属性或方法,允许在子类中访问;
public 修饰的属性或方法,允许在任何地方被访问。
(2)抽象类:不允许被实例化
(3)类的类型:与接口类似
(4)类与接口:一个类可以实现多个接口,用 implements 关键字来实现
(5)接口可以继承接口,可以继承类
11、泛型:定义在函数、接口或类的时候,不预先制定具体的类型,而在使用的时候再指定类型
定义泛型时,可以一次性定义多个类型参数。
泛型约束
泛型接口
泛型类
12、声明合并:若定义了两个相同名字的函数、接口或类,则会合并成一个类型。

参考:https://www.gitbook.com/book/xcatliu/typescript-tutorial/details

TypeScript 入门笔记的更多相关文章

  1. TypeScript 入门教程学习笔记

    TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...

  2. TypeScript 入门自学笔记 — 类型断言(二)

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14558034.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...

  3. TypeScript入门一:配置TS工作环境

    配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  7. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  8. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  9. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

随机推荐

  1. iframe里面的元素触发父窗口元素事件的jquery代码 转

    例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, ...

  2. sock文件

    无论是mysql,uwsgi还是nginx都会用到sock文件 首先它是由程序自动创建的,并不是我们自己手动.它的作用是用来通信.与之相对应的是tcp socket ,一般的程序会同时支持这两种方式, ...

  3. 【MySQL】20个经典面试题

    转自:https://blog.csdn.net/suifenglie/article/details/78919045 Part1:经典题目 1.MySQL的复制原理以及流程 基本原理流程,3个线程 ...

  4. HDU_1043 Eight 【逆向BFS + 康托展开 】【A* + 康托展开 】

    一.题目 http://acm.hdu.edu.cn/showproblem.php?pid=1043 二.两种方法 该题很明显,是一个八数码的问题,就是9宫格,里面有一个空格,外加1~8的数字,任意 ...

  5. tensorflow-如何防止过拟合

    回归:过拟合情况 / 分类过拟合 防止过拟合的方法有三种: 1 增加数据集 2 添加正则项 3 Dropout,意思就是训练的时候隐层神经元每次随机抽取部分参与训练.部分不参与 最后对之前普通神经网络 ...

  6. HDU6464 (权值线段树)-(查找区间第k1小于第k2小之间的和)

    http://acm.hdu.edu.cn/showproblem.php?pid=6464 不理解先看博客:https://blog.csdn.net/g21glf/article/details/ ...

  7. 112th LeetCode Weekly Contest Validate Stack Sequences

    Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...

  8. hybrid app开发工具

    hybrid app开发工具 1.AppCan AppCan是国内Hybrid App混合模式开发的倡导者,AppCan应用引擎支持Hybrid App的开发和运行.并且着重解决了基于HTML5的移动 ...

  9. jquery双日历日期选择器bootstrap-daterangepicker日历插件

    这个插件既可以作为双日历也可以作为单日历插件(jquery的插件在jquery插件库中http://www.jq22.com/下载很方便,在CSDN下载真麻烦) 引用 <meta http-eq ...

  10. mysql DML语句

    1, 插入数据 insert into emp1(ename,hiredate,sal,deptono) values('kingle','2000-01-01','2000',1); 插入数据加入需 ...