TS学习笔记(Four Day)

547 阅读2分钟

TS学习笔记(数组,对象,接口)

TS数组

  • 数组解构,数组展开运算符,数组遍历。
let xnumberlet ynumberlet znumber;
let five_array = [0,1,2,3,4];
[x,y,z] = five_array;
console.log([x,y,z])//0,1,2
//数组展开运算符
let four_array = [0123];
let five_array = [...four_array,  4];
//遍历数组
let numberstring[] = ["1""2""3"];
for (let i of number) {
  console.log(i);
}

小结:TS中数组和JS中操作变化不大。

TS对象

  • 对象解构,对象展开运算符。
let person = {
  name: "coolFish",
  sex: "男",
};

let { name, sex } = person;
//扩展
let person = {
  name: "coolFish",
  sex: "男",
  address: "Xiamen",
};

// 组装对象
let personWithAge = { ...person, age: 24 };

小结:和JS差别不大。

TS接口

  • 对象的形状。
interface Person {
  name: string;
  age: number;
}

let semlinker: Person = {
  name: "coolFish",
  age: 24,
};

小结;这里定义一个对象,他有名字和年龄,那么创建这个对象时候,要给他一个名字和年龄的属性。

  • 可选|只读。
//readonly 说明只读,只在创建阶段可以更改
interface Person {
  readonly name: string;
  age?: number;
}
//ReadonlyArray<T>去掉所有可变的方法,确保创建后不再变化
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
ro[0] = 12; // error!
ro.push(5); // error!
ro.length = 100; // error!
a = ro; // error!
  • 任意属性:除了必选,可选,有时候我们需要接收不确定的一些属性。
interface Person {
  name: string;
  age?: number;
  [propSex: string]: any;
}

const newObject = { name: "kakuqo", sex: '男' }

小结:预留一个接收任意属性的插口。

  • 接口和类型别名的区别。
//接口
interface Point {
  agenumber;
  sexstring;
}

interface SetPoint {
  (agenumbersexstring): void;
}
//类型别名
type Point = {
  agenumber;
  sexstring;
};
type SetPoint = (age: number, sex: string) => void;

小结:看起来没啥区别,就声明方式变了。

  • Other Types: 类型别名可以用于一些其他类型,比如原始类型、联合类型和元组
// 原始类型
type age = number;

// 联合类型
type PartialPointX = { x: number; };
type PartialPointY = { y: string; };
type PartialPoint = PartialPointX | PartialPointY;

// 元组
type Data = [number, string];

  • Extend:扩展,接口和类型别名都能扩展,接口和类型别名不会互斥,接口可以扩展类型别名,反之不行。
//接口扩展类型别名
type PartialPointX = { xnumber; };
interface Point extends PartialPointX { ynumber; }