typescript简介|青训营

89 阅读4分钟

昨天的课程应该来说对0基础的小伙伴还是挺不友好的,包括对于我这种学过一点点ts的... 笔记的话我就按照某马的课程顺序来写,大致总结一下吧. 如果感兴趣的可以去看原视频,大家想看的自己去b站搜,道长yyds.(也可私聊我,我分享一下~)

其实我个人是挺不喜欢ts的,因为我不喜欢java()...跟java像的我都不怎么能接受.不过既来之则安之,以后公司要用你也不能不写是不是.所以如果你也跟我一样的想法的话,我还是建议大家一句,真的要学,他可能让你觉得很讨厌,但是真的很有用...

ts是?为什么要用ts?

What: ts其实就是戴着镣铐的js,这个镣铐就是类型.它是一门强类型语言,变量一旦声明,就不能改变它的类型!

Why: 跟用js相比,用ts能够尽早发现错误,方便大型项目的维护.

ts的数据类型

  1. js中的数据类型: 简单数据类型有:Number,String,Boolean,null,undefined,Symbol 复杂数据类型有:Object(包括:Array , Function)
  2. ts新增: void类型 接口类型 元组类型 字面量类型 枚举类型

下面简单说一下这些类型,至于泛型的话,随缘更新...(根据推荐视频的顺序做了一些笔记,大家可以参考一下,当然我比较建议就是自己写笔记,至少跟着老师写一遍)

1-10

let x: number = 1
​
x = 2// x = '4' 不能赋值给字符串类型,因为已经制定了数字类型。console.log(x);
​
let x1 = '1' // 自动识别类型。
​
x1 = '2'let arr:number[] = [1, 2, 3] // 数字数组// arr.push(9) √  只能加入数字!let arr1: string[] = ['1', '2', '3']
​
let arr2: (string | number)[] = [1, '2', 3] // (string | number) 表示联合类型。联合类型只能.出共有的方法let x2: string | number = 3
​
x2 = '1000'// 类型别名type t = null | undefinedlet arr3: t[] = [null, undefined]
​
type t1 = (boolean | string)[]
​
 let arr4: t1 = [true, false, 'true']
​
 let arr5: object[] = [{}, {}, { name: 'zs', age: 18 }, []]
​
 // 数组属于对象....

11-18

//  function add(num1: number, num2: number):number {//   return num1 + num2//  }
​
 
​
 // 单独指定参数和返回值的类型const add = (num1: number, num2: number): number => {
​
  return num1 + num2
​
 }
​
 console.log(add(1, 2));
​
 type SubFn = (num1: number, num2: number) => number// 小注意点:类型别名只能给函数表达式和箭头函数用!// 下面这种方式就是用类型别名同时指定参数 返回值的类型const sub:SubFn = (num1, num2) => {
​
  return num1 - num2
​
 }
​
 console.log(sub(1, 2));
​
 // void就是无返回值.// 可以给函数指定undefined的返回值类型,但是你指定之后必须要返回undefined,没有返回undefined就报错,所以一般都用void.// 2023.8.4 现在不报错.但是定义成undefined不是好习惯,一般都是用voidconst test = (): void => {
​
  console.log(1111);
​
 }
​
 test()
​
 // const test2 = ():undefined => {//  console.log(11111111);// }// test2()// 可选参数.(可以全部可选) 但是要注意,不能前面可选 后面却不可选,这是错误的.const print = (name?: string, gender?: string): void => {
​
  if (name && gender) {
​
   console.log(name,gender);
​
  }
​
 }
​
 print('zs', '男')
​
 print('zs')
​
 print()
​
 // 对象类型 (自动推断)// let obj = {//  name: 'zs',//  age: 18// }// 定义对象的类型let obj:  {
​
  name: string,
​
  age: number,
​
  sayHi: (content: string) => void
​
 } = {
​
  name: 'zs',
​
  age: 38,
​
  sayHi(content) {
​
   console.log("哥们一点也不想学习",content);
​
  }
​
 }
​
 console.log(obj.age);
​
 obj.sayHi("cnm")
​
// 类型别名写法type p = {
​
  name: string,
​
  age: number,
​
  sayHi: (content: string) => void
​
 }
​
 const p1: p = {
​
  name: 'zs',
​
  age: 38,
​
  sayHi(content) {
​
   console.log("哥们一点也不想学习",content);
​
  }
​
 }
​
 // 接口interface (只能用来约束对象)interface IPerson {
​
  name: string,
​
  age: number,
​
  sayHi: () => void,
​
 }
​
 const p2: IPerson = {
​
  name: 'zs',
​
  age: 999,
​
  sayHi() {
​
   console.log('hello');
​
  },
​
 }
​
 p2.sayHi()
​
 // 接口的继承?interface IStudent extends IPerson {
​
  score: number,
​
  sleep:() => void
​
 }
​
 const p3: IStudent = {
​
  name: 'ls',
​
  age: 99,
​
  score: 59,
​
  sayHi() {
​
   console.log('hello');
​
  },
​
  sleep() {
​
   console.log('zzz');
​
  },
​
 }
​
 p3.sleep()
​
 // 高频面试题: type如何实现继承??type Person = {
​
  name: string,
​
  age: number
​
 }
​
 type Student = {
​
  score: number,
​
  sleep:() => void
​
 } & Person// & Person 就 相当于继承了哈. |的话就是表示或的意思const p4: Student = {
​
  name: 'ww',
​
  age: 29,
​
  score: 59.5,
​
  sleep() {
​
   console.log('每天我睡十二个小时,我是废物');
​
  },
​
 }
​
 p4.sleep()
​
}

19-22

 // 元组类型:// const arr: number[] = [111.1,111.2] 需求:数组表示经纬度.这样并不能完全达到需求const arr: [number, number] = [111.1, 123.2]  // [number,number] 就是元组类型 (限制长度)
​
 
​
 // 类型推论,ts会帮你推断类型,所以能省略可以省略类型. 但是 也有时候必须手动指定 (类型断言!)// 字面量类型. 顾名思义 字面量其实可以是 1 也可以是 '1' 也可以是 false // 这边老师举了一个例子(其实就是限制取值范围的)type Direction = '上' | '下' | '左' | '右'function changeDirection(direction: Direction) {
​
  console.log(direction);
​
 }
​
 changeDirection('上')
​
 // 枚举 enumerate x {}enum Milktea {
​
  traditional = '经典奶茶',
​
  pudding =  '布丁奶茶'
​
 }
​
 function changeTaste(milktea: Milktea) {
​
  console.log(milktea);
​
 }
​
 changeTaste(Milktea.pudding)

补充: 枚举的意义? 就是(我认为的) 限制你这个参数只能是某个对象(枚举对象)里面的一个属性. 另外,如果枚举里面只写属性名的话他们默认的值是数字...(就可以是 0 1 2 3 也可以是0 100 200 300...)

我是很少放自己写的笔记出来的,主要是写的没有非常大众化,够自己理解,但是别人可能看着没有那么爽(?)所以各位看官轻喷.