TypeScript 是 JavaScript 类型的超集,它可以编译成纯 JavaScript。

TypeScript 可以在任何浏览器,任何计算机和任何操作系统上运行,并且是开源的。

首先我们先来了解一下数据类型。

js 的数据类型

基本数据类型:String、Number、Boolean、Undefined、Null、Symbol

引用数据类型:Object({})、Array、Function

Symbol是ES6新增的原始数据类型,表示独一无二的值,最大的用法是用来定义对象的唯一属性名

ts 的数据类型

1. string 类型

let str: string = "123";

2. number 类型

let num: number = 123;

3. boolean 类型

let bool: boolean = true;

4. array

- 普通编译:string[] 数组内全是字符串

- 泛型编译:Array<number> 数组内全是数字

let arr1: Array<number> = [1,2,3], arr2: string[] = ["a","b","c"];

5. 元组(数组):元组类型允许表示一个已知元素数量和类型的'数组',各元素的类型不必相同

 const a:[string,number] = ['1',1])

6. 枚举(对象): enum 类型是对 JavaScript 标准数据类型的一种补充

- 使用枚举我们可以定义一些带名字的常量

- 使用枚举可以清晰地表达意图或创建一组有区别的用例

- TypeScript 支持数字的和基于字符串的枚举

enum Something {
等价于=====
enum Something{
  one = 1,
  two = 2
enum Something {
  two = "2",
  three = 3,
let ex: Something = Something.four; //4

7. any 任何类型 在无法确定变量将来要赋值的是什么类型的时候,使用 any,任何类型

let value: any = "abc"; 
value = 123;
value = true;

8. void 无类型 在函数没有返回值的时候使用

function warning: void (){
  console.log("this is void function"); // 函数没有return的时候使用void

9. Never 不存在的类型,一般用于报错信息

function error(message: string): never {
  throw new error(message)
function infiniteLoop(): nerver {
    while (true){

10. null 类型

let a: null = null;

11. undefined

let b: undfined = undefined

12. 类型断言 ts 一种容错处理

//类型转换方式有两种
let str: any = "this is string";
let strlength1: number = (str as sting).length; //建议使用这种方式
let strlength2: number = (<string>str).length;  //有兼容性问题

interface接口

interface 我们用接口来描述拥有 first,last 字段的对象,这就要求在实现接口的时候保证包含了接口要求的结构

interface Person {
    firstName: string;
    lastName: string;
function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
let user = { firstName: "li", lastName: "meimei" };
document.body.innerHTML = greeter(user);

接口里面的属性并非都是必须属性,有些函数只需传入部分参数,如下 color 属性为可选属性。

interface config{
    color?:string;
    width:number;

可读属性 readonly

interface config{
    readonly x:number;
    readonly y:number;

语法?.和??

第一个:问号点 (?.)

作用就是判断这个对象(this.element)下的(businessObject)下的(value)下的(length)是否为 null 或者 undefined,当其中一链为 null 或者 undefined 时就返回 undefined,这样即使中间缺少一个属性也不会报错,双问号后面接的就是默认值。

let res = obj?.data?.list /*<=等价=>*/ let res = obj && obj.data && obj.data.list

第二个:问号问号 (??)

作用是赋默认值,但是??忽略 0 和空字符串等错误的值。

console.log(1 ?? "xx")          //1
console.log(0 ?? "xx")          //0
console.log(null ?? "xx")       //xx
console.log(undefined ?? "xx")  //xx
console.log(-1 ?? "xx")         //-1
console.log("" ?? "xx")         //''
ts里声明数组有如下两种方式://第一种方式在元素类型后面紧跟一个中括号[] var a: number[] = [1,2,3]; console.log(a.length);//第二种方式使用泛型 Array<T> var b: Array<string> = ['i','o','u']; console.log(b[1]);//声明一个数组 let c : number[] = [];
1.数组的声明 let arr1:number[ ] //声明一个数值类型的数组 let arr2:Array&lt;string&gt; //声明一个字符串类型的数组 2.数组初始化 //定义一个数组数组容量为0 let arr1:number[] = [] //定义一个数组时,直接给数组赋值 let arr2:number[] = [1,2,3,4,5] //定义数组 的同事...
上面已经做过数组内存在单个或多个类型一样的数组的类型定义,再复习下 const arrA = [1, 2, 4] // 这里利用ts 的类型推断,arrA的数组类型定义为: const arrA: number[] = [1, 2, 4] 数组汇总存在单个或者多个同类型的数组的类型定义还有很多,比如: const arrC: boolean[] = [true, false] const arrD: string[] = ['1', '3'] const arrE: void[] = [undefined
TypeScript数组类型的定义 现在我们可以定义一个最简单的数组类型,比如就是数字类型,那么就可以这么写: const numberArr = [1,2,3]; 这时候你把鼠标放在numberArr上面可以看出,这个数组的类型就是 number 类型。这是 TypeScript 通过类型推断自己推断出来的。 如果你要显示的注解,也非常简单,可以写成下面的形式。 const numberArr: number[] = [1, 2, 3]; 同样道理,如果你的数组各项是字符串,你就可以写成这样。 //数组定义方式二Array<string>,尖括号内使用了泛型 letgenesis:Array<string>=["起初,神创造天地","地是虚混沌,渊面黑暗"]; console.info(genesis); const arraynct: number[] = [] // 定义整数型数组 const arraynct: string[] = [] // 定义字符窜型数组 const arraynct: any[] = [] // 定义任意类型数组 所以需要加上一个定义具体类型的写法