美文网首页
TypeScript学习笔记(一)-类型、接口、函数

TypeScript学习笔记(一)-类型、接口、函数

作者: 景阳冈大虫在此 | 来源:发表于2021-04-25 16:56 被阅读0次

基础类型

// 数组
let arr1: number[] = [1, 2, 3];
let arr2: Array<number | string> = [1, 2, 'a'];
//函数
let add = (x: number, y: number) => x + y;
let compute: (x: number, y: number) => number
compute = (a, b) => a + b;
//对象
let obj: { x: number, y: number } = { x: 1, y: 1 };
obj.x = 3;

枚举

将不容易记忆的硬编码写成枚举类型

  • 赋值为数字,则下面挨着没赋值的依次递增
enum R1 {
  apple ='a',
  banana = 3,
  pineapple
}
console.log(R1.pineapple) // 4
  • 反向映射



enum R1 {
  apple = 'a',
  banana = 3,
  banana2 = 3,
  pineapple
}
console.log(R1)

接口

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。

鸭式辨型来自于James Whitecomb Riley的名言:"像鸭子一样走路并且嘎嘎叫的就叫鸭子。"通过制定规则来判定对象是否实现这个接口。

对象类型的接口

调用

interface Param {
  name: string;
}

interface Result {
  name: string;
  color: string;
}

function overriddenParam(param: Param) {
  return {
    ...param,
    color: 'red'
  }
}
// 调用1
let currentParam = { name: 'apple', shape: 'circle' };
overriddenParam(currentParam);

// 调用2 类型断言
overriddenParam({ name: 'apple', shape: 'circle' } as Param)

// 调用3 字符串索引签名:用任意的索引字符串可以得到任意的索引类型
interface Param {
  name: string;
  [x: string]: any;
}
overriddenParam({ name: 'apple', shape: 'circle' });

属性类型

interface Param {
  readonly id: number;// 只读属性
  name: string;
  weight?: number;// 可选属性
}
  • 数字索引签名

TypeScript支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型

这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。

interface Names {
  [index: string]: any;
  [x: number]: string;
}

函数类型的接口

let add: (x: number, y: number) => number;

interface Add {
  (x: number, y: number): number
}

// 类型别名
type Add1 = (x: number, y: number) => number;
  • 混合类型接口
// 实现
function getLib() {
  let lib: Lib = (() => { }) as Lib;
  lib.version = '1.0';
  lib.doSomething = () => { };
  return lib;
}

let lib1 = getLib();
lib1();
lib1.doSomething();
let lib2 = getLib();

函数

  • 函数重载
function add(...rest: number[]): number;
function add(...rest: Array<string>): string;
function add(...rest: any[]): any {
  let first = rest[0];
  if (typeof first === 'string') {
    return rest.join();
  }
  if (typeof first === 'number') {
    return rest.reduce((pre, cur) => pre + cur);
  }
}
console.log(add(1, 2, 3));// 6
console.log(add('a', 'b', 'c'));// a,b,c

相关文章

网友评论

      本文标题:TypeScript学习笔记(一)-类型、接口、函数

      本文链接:https://www.haomeiwen.com/subject/bvlcrltx.html