TypeScript 基础类型

208 阅读3分钟

Boolean布尔值

最基础的的数据类型 true/false

let judge: boolean = false

Number数字类型

和js一样,ts里的数字包含两种 浮点数number和长整数bigint,支持多种进制

let decLiteral: number = 6
let hex: number = 0xf00d
let binary: number = 0b1010
let octal: number = 0o744
let bigNumber: bigint = 100n

tip: 010 - 05 = ?

String字符串

使用string表示文本数据类型,也可以使用双引号("")、单引号('')、反引号(``)

let name: string = "Hugo"
name = "Albert"

let fullname = `${name} Anna`

Array数组

ts像js一样可以操作数组元素,有两种方式可以定义数组,可以直接在元素类型后面接上[],表示由此元素组成的一个数组,也可以使用数组泛型

let list: number[] = [1, 2, 3]
let list: Array<number> = [4, 5, 6]

tip: []+1 , []++ , []+=1 各是什么结果

Enum枚举

枚举类型是对js标准数据类型的一个补充,默认从0开始编号,也可以手动指定成员的数值,除了通过枚举获得枚举的值,也可以通过值查到枚举

enum Color {Yellow, Green = 2, Red}
let c: Color = Color.Green
let name: string = Color[2]

Void无返回值

void表示函数没有返回值,只能赋予null(在--strictNullChecks未指定时)和undefined

function test(): void {
    console.log("test no return") 
}
let unusable: void = null

Null和Undefined

ts中,undefinednull两者各自有自己的类型undefinednull,默认情况下nullundefined是所有类型的子类型, 当指定了--strictNullChecks标记,nullundefined只能赋值给它们各自的类型(undefined可以赋值给void类型)

let u: undefined = undefined
let u: null = null

Never永不存在的值

never类型表示那些永不存在的值的类型,never类型是那些总是会跑出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型,变量也可能是never,当他们被永不为真的类型保护所约束时,never类型时任何类型的子类型,也可以赋值给任何类型

function error(message: string) never {
    throw new Error(message)
}
//推断的返回值类型为never
function fail(){
    return error("something error")
}

Object对象

object表示非原始类型,基本类型之外的类型,使用object可以更好的表示像Object.create这样的API

decalre function create(o: object | null): void;
create({prop: 0})
create(null)

// Error - 基本类型
create(42)
create("String")
craete(false)
create(undefined)

Tuple元组类型

元祖类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同,也可以通过访问已知索引的元素来得到正确的类型

// Declare a typle type
let x: [string, number];
// Initialize it
x = ['hugo', 20] // OK
x = [20, 'hugo'] // Error

// 通过索引访问
x[0].substr(1) // OK
x[1].substr(1) // Error, 'number' does not have 'substr'
// 越界访问
x[3] = 'message' // Error, Property '3' does exist on type '[string, number]'

Any

不清楚类型的变量为某一个类型 - 动态内容,比如用户输入或者来自第三方,这种情况下,我们不希望类型检查器对这些值进行检查而直接通过编译,就可以通过any类型来标记这些变量

let notSure: any = 4
notSure = 'string text'
notSure = false

// 当你只知道一部分数据类型的时候,也可使用any
let list: any[] = [1, 2, 'name', false]
list[1] = null