typeScript基础

一、关于typeScript

     typescript是拥有类型的javaScript超集, 它可以编译成普通\干净\完整的js代码 ES3
     js所拥有的内容ts都支持, 并且js有es678... ts也都支持这些语法
     ts拥有独特的一些数据类型 枚举 元组 void any

     ts会在那些位置去查找类型声明?
       1 内置类型声明 (在安装ts的时候内置的)
       2 外部定义类型声明
          1.在第三方库中直接有.d.ts文件
          2.ts官网(https://www.typescriptlang.org/dt/search?search=)查找.d.ts文件
      3 自己定义类型声明

二 、安装与环境搭建

  1. 全局安装typescript
npm install -g typescript

   2.项目初始化

      新建目录(项目名可自定义):mkdir ts-dev
      进入项目文件夹ts-dev: cd ts-dev
      生成package.json文件: npm init -y
      生成tsconfig.json文件: tsc --init
      本地安装ts和ts-node:npm i typescript ts-node

三、typeScript 数据类型

   1.number boolean  和  string

let num: number = 123;

let flag: boolean = true;

let msg: string = "hello world";

   2. null和undefined

在ts中 null和undefined他们是类型 也是值

let n: null = null;

let u: undefined = undefined;

  3. symbol

let name1: symbol = Symbol("name");
let name2: symbol = Symbol("name");
const obj = {
    [name1]: "hello world",
    [name2]: "你好世界",
}

  4. any

let msg: any = "1234";
msg = 123;
msg = true;
msg = [];
msg = null;

msg这个数据的数据类型可以是任何的数据

 5. void

void也可以用来声明变量,但只能作用在undefined身上,null也不行。只有tsconfig.json中strictNullChecks属性设置为false时,null才能赋值给void

const u:void=undefined;//这是个鸡肋用法,基本不会这么用
const n:void=null;//这样会报错
const age:void=18;//这样也会报错

6. 元组类型(tuple)

7.枚举类型(enum)

8.never类型

四、类型断言

在一些时候ts无法获取具体的类型信息(HTMLElement),但是这些(HTMLmageElement),信息有独特的属性和方法,此时就需要告诉ts当前的这个数据类型到底是那种,TS只允许类型断言转换为更具体或者不太具体(any/unknown)的类型版本,这种情况会导致ts类型混乱。

 
let test = document.getElementById("test") as HTMLImageElement
test.innerText = "123";
test.appendChild(document.createElement("div"));
test.onclick = function (){
};
test.addEventListener("click",()=>{
})
test.src = "图片地址url"

五、类的修饰符

1 public   修饰的是在任何地方可见 公有的属性或方法 默认编写的属性就是public的
2 private  修饰的是仅在同一类中可见 私有的属性或方法(不参与继承)
3 protected  修饰的是仅在类自身及子类中可见 受保护的属性或方法(不能读写)
4 readonly  修饰的是这个属性我们不希望外界可以任意的修改,只希望确定值之后直接使用

六、继承

interface Obj {
    name: string,
    run: () => void
}

interface Obj2 {
    age: number
}

//接口是支持多继承的(类的继承只能继承一个)
interface Obj12 extends Obj, Obj2 {
    jump: () => void
}
let obj: Obj12 = {
    name: "你好",
    age: 18,
    run(){},
    jump(){}
}

七、ts的泛型

在开发过程中 一些时候我们声明的函数不仅仅要明确他的数据类型,而且还要考虑这个方法具有很强的可复用性   实现类型参数化  ==>泛型   定义一个方法,在方法中不去确定参数到底是什么类型,而是需要使用者来进行传递。

类型的参数化

在定义这个函数的时候, 我们不去决定这些参数的类型,而是让调用者以参数的形式告诉我们函数的参数应该是什么类型。

泛型函数

函数中在函数名的后面通过<形参>的形式,接受传递过来的类型

泛型函数调用
//1通过<类型> 的方式将类型传递给函数
fn<string>("1234")
//2通过类型推导,自动的推导出我们传入变量的类型
//  在这里会推导出他们是字面量类型, 当然字面量类型对我们的函数也是适用的
fn<number>(123)
//引用类型会推导出想要的效果
fn<number[]>([1,2,3])
fn({a:1})
fn([1,2,3])


//通过泛型的形式来确定变量的数据类型
let arr: string[] = ["1","2","3"]
let arr1: Array<string> = ["1","2","3"]
let arr2: Array<number> = [1,2,3,4]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值