类型声明

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 };
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

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