初识TypeScript(TS虐我千百遍 我待TS如初恋)

125 阅读5分钟

写在前面

说实话 对于这篇文章有多少技术含量 平安也不是很确定 如果能给你带来帮助那是最好 如果有什么没有补充到的 欢迎知道的大佬在评论区帮忙补充一下 谢谢啦

初始TypeScript

什么是TypeScript

TypeScript简称TS 众所周知JavaScript是弱类型语言(如果不知道的话 那现在知道了 hhh)而TS的出现就很好的弥补了JS弱类型语言的缺点 而TS和JS的关系就像Less/Scss跟CSS的关系一样 所有的Less/Sscc代码最后都会转变成CSS代码 同理所有的TS代码最后都会转化成JS代码

为什么要学习TypeScript

前面也说过js是弱类型语言,很多错误只有在运行程序的时候才能发现,而ts是强类型语言,它提供了一套检测机制(在tsconfig,json文件中配置)如果我们在编码过程中出现错误 则ts就会提醒我们(当然bug不能够)

TypeScript的特点
  • 支持js新特性
  • 支持代码错误检查
  • 支持后端语言例如C,C++,Java中的特性(例如 类,枚举,泛型,类型转换,接口等)

一些简单的TS代码

// 声明一个变量a 同时指定它的类型为number
let a: number;
// a的数据类型被设置为了number 在以后的使用中a的值也只能为number
a = 10;
a = 15;
// a = '我是一个大帅哥' //此行代码会报错 因为变量a的类型是number 不能赋值string

// 同时也可以这样声明变量
let  b: string = '我是一个大帅哥';

// 如果变量的声明和赋值是同时进行的 那么TS可以自动对变量进行类型检测
let c = false;

// 函数中的参数 指定类型 a参数类型为字符串 同样b参数类型也是字符串
// 函数名(): 类型 代表函数返回值的类型必须和指定的类型一样

function fun(a: string, b: string): string{
    return a + b
}

fun('我是一个大帅哥','我是一个大帅哥')

// 也可以使用字面量来进行赋值
let d: 10;

// 可以使用 | 来连接多个类型(联合类型)
let e: string | number
e = '我是一个大帅哥'
e = 123

TS中的数据类型

TS中的数据类型完美的继承了JS中的数据类型,其中TS自己也新增了几个数据类型例如:any unknown void never 元组 enum(枚举)等 下面请听我细细道来

any 表示可以是任意类型的 也可以理解为一个变量设置了any后就自动关闭了TS的类型检测(当然指的是被赋值的那个变量,并不是所有的,且TS中不建议使用)

let a: any;
a = 123
a = []
a = false
a = '我是一个大帅哥'

// 首先我们先设置一个变量
let b: string
b = a // a的类型是any 它可以赋值给任何变量

let c // 声明变量如果不指定类型的话 TS解析器就会自动判断该变量的类型为any(隐式any)

unknown 表示一个未知的值

let a: unknown;
// unknown 实际上是一个安全类型的any
// unknown 类型的变量 不能直接赋值给其他变量

类型断言 告诉TS编辑器变量的实际类型

let a: string
let b: any
/*
    语法:
        变量 as 类型
        <类型> 变量
*/

b = a as string
b = <string> a

void 表示空

// 以函数为例 就表示没有返回值的函数
function fun(): viod {
    return
}

never 表示永远不会有返回值

function fun(): never {
    throw new Error("报错啦")
}

object 表示一个对象(当然 说了跟没说一样hhhh)

let a: object // 不建议这样写
let b:{} //建议这样写
// {} 用来指定对象中包含那些属性
// 语法 :{属性名: 属性值...}
let c: {name: string, age: number}
c = {name: '陈平安', age: 20} // 这里的age就是必须要写的 不然ts提示器会报错

// 在当前属性加上? 表示当前属性是可选的
let d: {name: string, age?: number}
d = {name: '帅哥', age: 18} // age可以不写

// 如果有很多种属性的话 一个一个设置很麻烦的(当然如果你觉得不麻烦的话也可以一个一个设置)
// 所以还有这种写法
let e: {
    name: string,
    [propName: string]: any // 表示可以是任何类型的属性(意思就是可以添加任何属性)
    // 其中的propName 是可以自己写的 并不是固定写法 自己想写成什么就写成什么
 }
 
 e = {name: '陈平安大帅哥', age: 20, gender: '男'}

设置函数的结构声明

// 语法:(形参:类型,形参:类型...) => 返回值

let a: (a: string, b: string) => string
a = function(a, b) {
    return a + b
}

设置数组的声明结构

// 语法:类型[] || Array<类型>
let a: number[] //表示一个只能存放number的数组
let b: Array<number> //同上 只不过是语法不一样

let c: string[] //表示一个只能存放string的数组
let d: Array<string> // 一样样儿的嗷

元组:固定长度的数组

// 语法:[类型,类型...]
let a = [string, string]
a = ['你懂的嗷', '你们也是大帅哥~']

枚举 enum

   enum Gender{
       Male,
       Female
   }
   let a: {name: string, gender: Gender}
   a = {
       name: '陈平安',
       gender: Gender.Male
   }
   
   console.log(a.gender === Gender.Male)

& 表示同时

let a: {name: string} & {age: number}
a = {name: 'xxx', age: 18}

类型的别名

type myType = string | number
let a: myType // a可以是string也可以是number
let b: myType // 同上

写在结尾

这篇文章就先介绍一下TS的一些数据类型,剩下的内容平安会尽快更新出来(打工人嘛dddd) 感谢阅读 如果觉得写的不错的话就麻烦留个赞吧 谢谢啦