类型声明

ts声明简单类型
let str : string = '123' 
let age : number = 123
let flag : boolean = false
let u : undefind = undefind
let n : null = null
//任意类型都可以赋值为null或undefined,当不确定类型时可以使用any
let Any : any = 123
let str : string = null`
ts声明数组
let arr : number[] = [123]
let arr : [number,string] = [1,'1'] // 元组
interface 接口
//不关注如何使用,只描述形状

//定义对象 只读id 字符名称  可选属性年龄
interface Person { 
  readonly id: number;
  name: string;
  age?: number;
}
let person: Person = {
  id: 1,
  name:'xiaoming',
}
// 定义方法 arguments和返回值均为number 第三个参数可选
interface isum{
 (x: number, y: number, z?: number): number
}
const add: isum =  (x,y,z)=>{
  if(z) return x+y+z
  return x+y
}
定义方法
const  add = (x: number, y: number, z?: number)=>{
  if(z) return x+y+z
  return x+y
}
类型推论
在不声明类型的情况下自动获得定义时的类型
let num = 1
num = '1'

error TS2322: Type 'string' is not assignable to type 'number'.
联合类型
//同时可以是多个类型 但在使用方法的时候只能使用联合类型中共有的方法 例如number和string的共有方法只有valueOf和toString
let numOrStr: number | string;
类型断言
//上面提到联合类型只能使用共有的方法,如果想使用单一类型的方法就需要类型断言
const getLength = (x: number | string): number => {
  const str = x as string;
  if (str.length) {
    return str.length;
  } else {
    const num = x as number;
    return num.toString().length;
  }
};
类型守卫 type guard
//使用条件语句typeof和instanceof可以自动缩小类型的范围 
const getLength2 = (x: number | string): number => {
  if (typeof x == "number") {
    return x.toString().length;
  }else {
    return x.length
  }
};
枚举 enum
//数字枚举
enum Direction {
  Up,
  Down,
  Left,
  Right,
}
console.log(Direction.Up);
console.log(Direction[0]);
//字符串枚举
enum Direction2 {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right',
}
泛型
//在定义函数、接口或类的时候不先指定类型而是在使用的时候再指定类型的特征
function echo<T>(arg: T): T {
  return arg;
}
const result: string = echo("1");

function swap<T, U>(arr: [T, U]): [U, T] {
  return [arr[1], arr[0]];
}
const swapArr = swap([1, 2]);
console.log(swapArr);
约束泛型
function echoLength<T>(arg: T): T {
  console.log(arg.length);
  return arg;
}
//参数不一定有length属性所以会报错
error TS2339: Property 'length' does not exist on type 'T'
//给泛型 添加约束
interface hasLength {
  length: number;
}
function echoLength<T extends hasLength>(arg: T): T {
  console.log(arg.length);
  return arg;
}

泛型在接口中的使用
interface keyPair<T,U>{
    key:T,
    value: U
}
let kp1:keyPair<number,string> = {
    key: 1,
    value: '1'
}
类型别名
//相当于自定义类型
type strOrNum = string | number
let str : strOrNum = '1'
let num : strOrNum = 1
类型字面量
type Direction = 'Left'|'Right'|'Bottom'|'Top'
交叉类型
//多种类型特性合并的类型
interface Name {
  name: string;
}
type IPerson = Name & { age: number };
let person1: IPerson = { name: "p1", age: 22 };
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先来看看知识图 TS 是什么 ? TS:是TypeScript的简称,是一种由微软开发的自由和开源的编程语言。 T...
    w冷兔w阅读 125评论 0 1
  • 一、使用淘宝镜像: npm 安装插件的时候可能会比较慢,甚至慢到失败,这是因为 npm 的服务器在国外,所以需要一...
    CondorHero阅读 1,804评论 0 1
  • 2021年7月29日,天晴 我的沟通风格 今天有微风,人感觉不那么浮躁,老天今天穿的衣服是蓝白色,云朵压的很低很低...
    我如春风暖阅读 489评论 0 0
  • iOS 音视频采集以及写入文件 添加权限: 在项目info.plist中,进行如下配置。 privacy...
    我会回来的阅读 178评论 0 0
  • 日期:2023-08-07 TypeScript小结 快速搭建TypeScript开发环境 首先,全局安装Type...
    rebirth重生A阅读 124评论 0 0