ts

155 阅读2分钟
  1. 数组的声明
//vue2
let ary: Array<string>
let arr: number[]
//vue3
const data_userNumber = ref<any>([])
data_userNumber.value = data.user
Array<T>,
这个T就是类型,
相当于说动物<哺乳动物>
  1. 用ts声明对象
interface Myobject = {
  [key: string]: any
  }
  1. 数组初始化
// vue2
let ary: Array<string> = ['a', 'b', 'c']
let arr:number[] = [1,2,3,4]

  1. 对象的初始化
interface Person { 
  name: string; 
  age: number; 
} 
// tom的类型是Person,tom的形状必须和接口Person一致 
let tom: Person = { 
  name: 'Tom, 
  age: 25 
};
  1. 定义数组每一项都为对象
interface Item {
  name:string; 
  path:string;
  }
 interface Index {
   [index:number]: Item
   }
  let list:Index = [{
  name: '',
  path: ''
  }]
  

interface可以用来约束函数、对象、类

1)对象类型的接口:
interface ListItem {
   id: number,
   name: string
 }
 interface List {
   data: ListItem[]
 }
 function getListId(list: List){
   list.data.forEach(item => {
     console.log(item.id,item.name)
   })
   }
   // 允许传入的list有除了接口定义的其他值,但接口中规定的值必须要有
   let list = {
     data: [
       {id: 2, name: 'jonn', age: 13}]
      }
      //若直接传入对象内容(字面量),ts会对其余的值进行类型检查,解决方法1: 将内容赋值给一个变量 2.添加类型断言 as + 对象类型  3.给接口添加[x: string]:any
      getListId({data: [{id: 1,name: 'hh', age: 13}]} as List)
      
 2)函数类型的接口:
   第一种: interface Add {
     (x: number, y: number):number
   }
   第二种: let add: Add = (a,b) =>{return a + b}
   3) 混合类型的接口(一个接口即可以定义一个函数,也可以定义一个对象)
   // 混合类型接口
//混合类型接口
interface MixItf {
    ():void;
    msg:string;
    dosomething():void
}
function getMix(){
    let lib:MixItf = (() => {}) as MixItf;
    lib.msg = 'rose';
    lib.dosomething = () => {}
    return lib;
}
let getMix1 = getMix()
console.log(getMix1.msg) //rose
  1. 泛型(generics) 定义函数、接口、类的时候不预先指定类型,使用的时候再指定类型。
//使用泛型
interface Obj{
	name:string;
	path:string;
}
let array:Array<Obj>  = [{name:"",path:""}];

image.png 7.interface && type 联合类型必须用type

//联合类型 和  交叉类型
type StringNumber = string | number;
let a: StringNumber;
a = "1";
a = 7;
https://segmentfault.com/a/1190000023858355
  1. 如何判断一个对象为空对象?
let data = {};
let arr = Object.keys(data);
console.log(arr.length == 0);//true

  1. 声明函数
//普通函数
function add(num1:number,num2: number):number {
  return num1 + num2
   }
   //箭头函数
 const ad = (a:number = 100, b:number = 100): number => {
   return a + b
   }
   //注意:箭头函数的返回值类型要写在参数小括号的后面
  // 参数是对象
 function info({name, age}: {name: string, age: number}):string {
   return name + age
 }
 const text = info({name:'xxx', age: 18})
 //参数是对象
 function getNumber({one}: {one: number}) {
   return one
 }
 const number = getNumber({one: 1})
  1. ts中的类和js中类基本相同,不同点是ts多了一些修饰符。类的重写和继承。

1.png