基础类型
Typescript 支持与 Javascript几乎相同的数据类型,此外还提供枚举值使用,注意 :基本类型的注解都是小写字母开头。
1. 布尔值
let isDone : boolean = false
2. 数字
与Javascript一样,Typescript的所有数字都是浮点数,这些浮点数都是number,除了支持十进制和十六进制变量,Typescript还支持ES5引入的二进制和八进制
let decLiteral : number = 20 // 10进制
let hexLiteral : number = 0x14 // 十六进制
let binaryLiteral : number = 0b10100 // 二进制
let octalLiteral : number = 0o24 // 八进制
3. 字符串
let name : string = 'bbb'
4. 数组
Typescript可以想Javascript一样操作数组。可以有两种方式添加数组的类型注解。
let list : number[] = [1,2,3]
let list : Array<number> = [1,2,3]
5. 元组Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。比如,你可以定义一对值位string
和number
类型的元组。
let x : [string,number]
x = ['hello',10] // OK
x = [10,'hello'] // ERROR
访问一个已知索引的元素,会得到正确的类型
console.log(x[0].substr(1)) // ok
console.log(x[1].substr(1)) // Error, 'number' 不存在 'substr' 方法
当访问一个越界的元素时,会使用联合类型替代
x[3] = 'world' // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()) // OK, 'string' 和 'number' 都有 toString
x[6] = true // Error, 布尔不是(string | number)类型
6. enum
enum
枚举类型是javascript标准数据类型的一个补充,使用它可以为一组数值赋予友好的名字。
enum Color { Red,Green,Blue }
let c : Color = Color.Green
枚举类型与Symbol类型不同的是,它可以为元素编号,默认从0开始编号
enum Color { Red=1,Green=2,Blue=4 } // 从1开始编号
let c : Color = Color.Green
let colorName: string = Color[2] // Green
7. any
有时候,我们会在编程阶段为不明确类型的变量指定一个类型,这些值可能来自动态内容,比如来自用户输入或者第三方代码库,这种情况下,我们不希望类型检查器对这些指进行检查,而是让他直接通过编译阶段的检查。
let notSure : any = 4
notSure = 'maybe a string instead'
notSure = false
any
允许你在编译时可选择地包含或溢出类型,例如你有一个数组,包含不同的类型
let list: any[] = [1, true, 'free']
list[1] = 100
8. void
void类型表示没有任何类型,当一个函数没有返回值的时候,你可以看见其返回值类型是void
function warnUser : void (){
console.log('>>')
}
void只应该在函数定义返回值的时候使用,直接声明一个void
类型没有什么作用。
let unsable : void = undefined
9. null 与 undefined
Typescript 中,undefined
与null
两者各有自己地类型叫做undefined
与null
,与void
相似,他们本身的作用并不大。
let u: undefined = undefined
let n: null = null
另外,默认情况下,undefined
与null
是所有类型的子类型,你可以将他们赋值为其他类型。
当指定--strictNullChecks
标记,undefined
与null
只能赋值给void
,这能避免很多问题。
9. never
never
表示用不存在的类型,常用于抛出异常或者根本不会有返回值的函数表达式或箭头函数表达式的返回值类型。
never
是任何类型的子类型,也可以赋值给任何类型,然而,没有类型是never
的子类型,也就是说没有任何类型可以赋值为never
,除了它自身。
// 返回never的函数必须存在无法达到的终点
function error(message : string) : never {
throw new Error('???')
}
10. object
object
表示非原始类型,就是除了number boolean symbol string null undefined
之外的类型。
使用object
类型,可以更好的表示object.create(null)
这样的API
declare function create(o : object | null ) : void
create({ prop: 0 }) // OK
create(null) // OK
create(42) // Error
网友评论