深入TypeScript(更新中) | 青训营笔记

70 阅读2分钟

一. 介绍

TypeScript 是 JavaScript 的超集,它支持JavaScript中的所有语法,TypeScript代码可以和现有的JavaScript代码结合使用,以及拥有额外的特性,例如静态类型、类、接口、命名空间、泛型等。

二. 常用类型基本概念

  1. 基础类型

在 TS 中,使用 : 指定变量的类型

  • String字符串:(使用 string 定义字符串类型)
let str: string = 'hello'
  • Number数值:(使用 number 定义数值类型)
let sum: number = 10;
  • Boolean布尔值:(使用 boolean 定义布尔类型)
let bool: boolean = true;
  • Void 空值:(使用void来表示没有任何返回值的函数)
function fun: void{
    console.log(666)
}
  • Any 任意值:(使用 any 来设定可以被赋值为任意类型)

注意:变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型

let temp: any = 'hello'
temp = 666
// 正常编译运行
  • Null(使用 null)
let n: null = null;
  • Undefined(使用 undefined )
let u: undefined = undefined;
  1. 对象类型
  • type

type 可以创建具有命名类型的别名

type myString = string

let name: myString = 'xiaowen'
  • interface

用于描述类、对象和函数等结构化类型。它允许你命名属性并指定它们的类型。

interface Person {
// 限制 name 必须为 string , age 必须为 number , hobbles 可选 ,有无均可
    name:string,
    age:number,
    hobbles?:array
}

// 使用 Person 接口,规定必须要且只有 name 和 age ,且类型和上面一致
let per: Person = {
    name: 'xiaowen',
    age: 26
}

定义了一个接口 Person(行为的抽象,事物的本质),Person 约束了定义的变量 per 属性类型必须和接口 Person 一致

特殊地,还有可读属性:

规定只有在创建时可以赋值,后面无法修改

interface Person {
    readonly name:string,
    age:number,
    hobbles?:array
}

let per: Person = {
    name: 'xiaowen',
    age: 26
}

per.name = 'xiaoming' // 此行会报错
  1. 接口 interface
  2. 断言

三. 进阶用法

  1. 联合类型

使用 | 来分隔选定的类型 (与 || 逻辑或的作用相似)

例如 number | string 代表变量的类型可以是数值,也可以是字符串类型 注意:当变量作为函数的形参时,未指明变量的类型时,只能访问其联合类型共有的方法和属性

function add(count:number | string){
// length不是 number 和 string 类型所共有的方法
    return count.length
// toString 为它们所共有的方法
    return count.toString()
}
  1. 泛型(常用于函数) 语法: 在 <> 内写类型参数,一般用T来表示(例 <T>)类似变量或者说是一个占位符来规定类型 应用场景:

统一函数输出(形参)输入(返回值)的类型统一

// 第一个 T 代表传入的参数可以是任意
// 第二个 T 代表返回的值必须和第一个 T 相同
function fun<T>(a:T):T {
    return a
}

如有错误欢迎指正,本文章持续更新中。。。