当前位置:   article > 正文

Typescript(前端未来的语言)_typescript语言是前端还是后端

typescript语言是前端还是后端
  1. 什么是Typescript:

Typed JavaScript at Any Scale

添加了类型系统的JavaScript,适用于任何规模的项目

  1. Ts和Js

Ts特点:

  1. JavaScript的超集,用于解决大型项目的代码复杂性

  1. 强类型,支持静态和动态类型

  1. 可以在编译期间发现并纠正错误

  1. 不允许改变变量的数据类型

Js特点:

  1. 一种脚本语言,用于创建动态网页

  1. 动态弱类型语言

  1. 只能在运行时发现错误

  1. 变量可以被赋予不同类型的值

图表说明:

  1. 为什么要学Ts

  1. 就跟前几年,jQuery时代快结束时,你不会vue或者react一样,根本没有就业的机会

  1. 如今别说react,连vue的默认版本都是vue3了 vue3和typescript是绑在一起的,再过两年,除了老项目,新项目就是清一色的Ts了

  1. 创建Ts项目

  1. npm create vite

1.1Project name 项目名称

1.2选择Vue

1.3选择自定义

1.4自定义选项

1.5安装所有的包

说明:需要axios可以用下列命令安装
npm i axios -S

1.6运行项目

npm run dev

  1. Ts(vue3)组件中运行

1.数据类型

  1. <script setup lang="ts">
  2. let num:number = 456;
  3. let msg:string = 'I love typescript'
  4. let flag:boolean = true
  5. let un:undefined = undefined
  6. let nu:null = null
  7. // 函数执行不返回数据 void
  8. function say():void{
  9. alert("你好")
  10. }
  11. let count:any = "abc"//少用,不建议用
  12. </script>
  13. <template>
  14. <main>
  15. <h1>TypeScript学习</h1>
  16. <p>num:{{ num }}</p>
  17. <p>msg:{{ msg }}</p>
  18. <p>flag:{{ flag }}</p>
  19. <p>un:{{ un }}</p>
  20. <p>nu:{{ nu }}</p>
  21. <button @click="say()">say</button>
  22. <p>count:{{ count }}</p>
  23. </main>
  24. </template>

2.数据类型与元祖

  1. <script setup lang="ts">
  2. // string类型的数组
  3. let arr:string[]=["abc","def","lover"]
  4. // let arrlist:number[]=[1,2,3]
  5. // 定义一个数组期待值类型为number
  6. let list:Array<number> = [123,789]
  7. list.push(123)
  8. arr.push("type")
  9. // let strlist:Array<string> = ["文丁响","王志悦"]
  10. // 定义一个元祖
  11. let tup:[string,number] = ["lover",123,]
  12. </script>
  13. <template>
  14. <main>
  15. <h1>TypeScript学习</h1>
  16. <p>{{ arr }}</p>
  17. <p>{{ list }}</p>
  18. <p>{{ tup }}</p>
  19. <!-- <p>{{ strlist }}</p> -->
  20. <!-- <p>{{ arrlist }}</p> -->
  21. </main>
  22. </template>

3.函数

  1. <script setup lang="ts">
  2. function add(x:number,y:number):number{
  3. alert(x+y);
  4. return x+y;
  5. }
  6. let add2 = (x:number,y:number):number =>{
  7. alert(x*2+y*2);
  8. return x+y;
  9. }
  10. </script>
  11. <template>
  12. <main>
  13. <h1>TypeScript学习</h1>
  14. <button @click="add(5,9)">add</button>
  15. <br>
  16. <button @click="add2(3,4)">add2</button>
  17. </main>
  18. </template>

4.1接口interface类型

  1. <script setup lang="ts">
  2. // 接口 定义对象 通常首字母大写
  3. interface Person {
  4. name:string
  5. age:number|string
  6. readonly id:number //readonly只读
  7. job?:string //可有可无
  8. }
  9. interface Student extends Person {
  10. major:string
  11. }
  12. let p1:Person = {
  13. name:"wen",
  14. age:18,
  15. id:3
  16. }
  17. let p2:Person = {
  18. name:"小文",
  19. age:"28岁",
  20. id:4,
  21. job:"teacher"
  22. }
  23. let p3:Student = {
  24. name:"wzy",
  25. age:22,
  26. id:4,
  27. job:"student",
  28. major:"人工智能",
  29. }
  30. </script>
  31. <template>
  32. <main>
  33. <h1>TypeScript学习</h1>
  34. <p>{{ p1 }}</p>
  35. <p>{{ p2 }}</p>
  36. <p>{{ p3 }}</p>
  37. </main>
  38. </template>

4.2接口 interface类型

  1. //描述函数类型
  2. <script setup lang="ts">
  3. // 定义函数
  4. type Add1 = (n1:number,n2:number) =>number
  5. // interface定义函数
  6. interface Add2 {
  7. (n1:number,n2:number):number
  8. }
  9. const addtype:Add1 = (n1,n2) =>{
  10. console.log(n1,n2);
  11. return n1+n2;
  12. }
  13. addtype(4,5)
  14. const addInter:Add2 = (n1,n2) =>n1*2+n2;
  15. addInter(2,3);
  16. </script>
  17. <template>
  18. <main>
  19. <h1>TypeScript学习-type</h1>
  20. </main>
  21. </template>

4.3接口interface类型

  1. //定义不确定的属性
  2. interface RandKey{
  3. [propName:string]:string
  4. }
  5. const obj:RandKey = {
  6. n:"nihi",
  7. b:"你好"
  8. }

5.内置类型

  1. <script setup lang="ts">
  2. let d:Date = new Date();
  3. let reg:RegExp = /^1\d{10}/
  4. let err:Error = new Error('错误人类')
  5. if(reg.test("1359885974")){
  6. throw(err)
  7. }
  8. // 对象
  9. var obj:object = {
  10. name:"xiaohai",
  11. age:18
  12. }
  13. </script>
  14. <template>
  15. <main>
  16. <h1>TypeScript学习</h1>
  17. <p>{{ d }}</p>
  18. <p>{{ reg.test("13598859747") }}</p>
  19. <p> {{ obj }} </p>
  20. </main>
  21. </template>

6.类型别名type

  1. <script setup lang="ts">
  2. // 定义arrItem类型 字符串或者数字
  3. type arrItem = string | number;
  4. // 定义arr数组 值类型为arrItem
  5. const arr: arrItem[] = [1, "a", 2, "b"]
  6. // 定义Person类型
  7. type Person = { name: string }
  8. // 定义学生类型 Person 与 major 联合
  9. type Student = Person & { marjor: string }
  10. // 定义老师类型 Person 与 teach联合
  11. type Teacher = Person & { teach: string }
  12. // 定义一个元祖类型,先学老师
  13. type StudentAndTeach = [Student, Teacher]
  14. // 定义ST类型 可以是学也可以是老师
  15. type ST = Student | Teacher;
  16. // 定义list数组 内容可以是学生 可以是老师
  17. var list: ST[] = [
  18. { name: "悦悦", marjor: "生气大王" },
  19. { name: "文丁响", teach: "H5" },
  20. { name: "悦悦", marjor: "生气大王" }
  21. ]
  22. var temp:StudentAndTeach=[
  23. { name: "悦悦", marjor: "生气大王" },
  24. { name: "悦悦", teach: "生气大王" },
  25. ]
  26. </script>
  27. <template>
  28. <main>
  29. <h1>TypeScript学习</h1>
  30. <p>{{ arr }}</p>
  31. <p>{{ list }}</p>
  32. <p>{{ temp }}</p>
  33. </main>
  34. </template>

7.字面量

  1. type ButtonSize = 'mini' |'small'|'normal'
  2. type Sex = '男'|'女'

6.type与interfave区别

1.写法

  1. interface Person{
  2. name:string
  3. age:number
  4. }
  5. type Person = {
  6. name:string
  7. age:number
  8. }

2.相同:都定义一个对象或函数,都可以继承

  1. type addType = (num1:number,num2:number)=>number
  2. interface addType{
  3. (num1:number,num2:number):number
  4. }
  5. const add:AddType = (num1,num2)=>num1+num2

3.不同

interface接口是Ts设计出来用定义对象类型的,
type 是类型别名,用于给各个类型定义别名,让TS更简洁,清晰
-type 可以声明基本类型,联合类型与交叉类型,元祖,interface不行
-interface 可以合并重复声明,type不行
平时开发时候,一般使用组合或者加载类型使用type
一般用于extends 或implements的用interface
定义对象与函数看心情

4.interface 继承type ,type也可以继承interface

  1. interface Person {
  2. name:string
  3. }
  4. interface Student extends Person{
  5. grade:number
  6. }
  7. type Person = {
  8. name:String
  9. }
  10. Type Student = Person&{grade:number}

7.泛型

1.泛型的概念

泛型是指在定义函数,接口,或类的时候,不预先指定具体的类型,而是使用的时候再指定类型
泛型中的T就像一个占位符号,或者一个变量,在使用的时候可以把定义类像参数一样传入,它可以原封不动的输出
泛型在成员之间提供有意义的约束:成员(函数的参数,返回值,类的实例,成员,类的方法)
泛型是一种类型的泛指

2.泛型的好处

1 函数的类可以轻松支持多种类型增强程序的扩展性
2. 不必写冗长的联合类型,增强代码的可读性
3. 灵控制类型直接的约束

3.传入什么类型,返回什么类型

  1. function print(arg:string|num):string|number{
  2. console.log(arg);
  3. return arg;
  4. }

4.泛型中的 T 就像一个占位符、或者说一个变量,在使用的时候可以把定义的类型像参数一样传入,它可以原封不动地输出。

  1. function print<T>(arg:T):T{
  2. console.log(arg);
  3. return arg
  4. }

5.处理多个参数

  1. function swap<T,U>(arg:[T,U]):[U,T]{
  2. console.log('arg',arg);
  3. return [arg[1],arg[0]]
  4. }

6.定义类型与推断

  1. 使用的时候、
  2. print<string>("hello")
  3. 定义类型与推断
  4. print("hello")

7.泛型与异步

  1. interface UserInfo{
  2. name:strig
  3. age:number
  4. }
  5. fucntion request<T>(url:string):Promise<T>{
  6. return fetch(url).then(res=>res.json())
  7. }
  8. request<UserInfo>("user/info").then(res=>{
  9. console.log(res)
  10. })

8.1约束泛型

  1. function printLength<T>(arg:T):T{
  2. console.log(arg.length)
  3. return arg;
  4. }
  5. 不确定T是否有Length
  6. interface Ilength{
  7. length:number
  8. }
  9. function printLength<T extends Ilength>(arg:T):T{
  10. console.log(arg.length)
  11. return arg;
  12. }

8.2约束泛型-类

  1. class Stack<T>{
  2. private data:T[] = []
  3. push(item:T){
  4. return this.data.push(item)
  5. }
  6. pop():T|undefined{
  7. return this.data.pop()
  8. }
  9. }
  10. var s1 = new Stack<number>()
  11. var s2 = new Stack<string>()

8.3约束泛型-接口

  1. //使用泛型,可以对interface进行改造,让interface更灵活
  2. interface Ikeyvalue<T,U>{
  3. key:T
  4. value:U
  5. }
  6. const k1:Ikeyvalue<number,string>={
  7. key:18,value:'line'
  8. }
  9. const k2:IKeyValue<string,number> = {key:'lin',value:18}

9.泛型定义数组

  1. const arr:number[] = [1,2,3]
  2. cosnt arr:Array<number> = [1,4,5]
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/797258
推荐阅读
相关标签
  

闽ICP备14008679号