基础类型
常见类型
就是变量类型声明,和.NET,C#等面向对象语言一样,int类型 double float类型,float,比如数据库中的name: varchar(80)
一样,ts也提供了很好的支持,比如字段、属性、方法,哈哈说远了 ,在定义字段的时候会用到变量类型声明,ts同理。
let age: number = 8;
let name: string = '张三';
let favorite: string[] = ['踢足球','唱歌','跳舞',...] or favorite: Array<string> = ['玩游戏',...]
// string[] 是 Array<string>的简写方式,类似的Array<number> 等同于 number[]
元组tuple
定义一组已知不同类型的数组,比较绕口,直接上代码,我现在用一个元组表示你的年龄,姓名,性别,成绩。
let MathGrade:[number,string,string,number] = [18,'李四','男',98]
现在我假定有一个成绩表,李四的成绩就是MathGrade[3]
就可以直接拿到成绩了,是不是很方便
总结:元组比数组更强大,印象中的js都是好像只能够存放同一类型的数组,没有尝试过其他的
枚举类型enum
类似提前声明一组数据,这组数据中包含映射的默认值,这个东西和接口interface
类似,但是这个有值,interface声明的内容一般只有类型和返回类型。
元组类型中,默认下标index是走0开始的,你可以不给赋值,默认是0往后累加,但是和下标不一样,这个下边还是走0开始的,是因为我主动给赋值了,才red变成1的。创建的c结果就是3,按照正常默认情况结果就是2~
enum Color { red = 1, green = 2, blue = 3 }
let c: Color = Color.blue;
console.log(c) //3
console.log(Color[2]) //3
any 类型
任意类型,在你定义一个变量不知道具体类型的时候就可以用到any,可能在后边会动态复赋值。比如你在开始的时候就定义了一个
const grade:any;
因为我也不知道这是个什么类型,在后边会完善它。就可以使用any,在定义函数的时候也是一样的。当然所有变量、函数、泛型都可以使用any
,但是这样你使用typescript的意义在哪里呢
const grade:any;
grade= {
name: '李四',
age: 28
}
void 无返回值类型
无返回值类型,一般常见于面向对象语言定义函数的时候声明public static void setName(index){ // dosomething }
。es是没有的,但是我们typescript给我们提供了,是不是很方便
const readIndex = (index):void =>{ console.log(index) }
声明一个void的变量没有任何意义,大哥规定你你只能赋值两个,undefined,null
const b:void = undefined
const c:void = null
null 和 undefined
在typescript中null
和undefined
变量是可以单独声明的,但是他们本身的用处并没有想象中那么大,但是可以直接复制给其他string或者number值类型的变量,这将变的非常有效
const b: string = null
const a: number = undefined
nerver类型
对于永远不存在的类型的第一个定义,比如定义一个函数报错之后会返回什么,当然这种情况不会发生
// 返回never的函数必须存在无法达到的终点
function error(msg: string){
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
Object 类型
object
表示非原始类型,也就是除number
,string
,boolean
,symbol
,null
或undefined
之外的类型。简单来讲object是引用类型不是值类型。
declare function setInfo(info: Object | null):void {}
// 只有在传入对象类型和null类型的时候才不会报错
setInfo({name:'李四'}) //ok
setInfo(null) // ok
setInfo(1) // error
setInfo('李四') // error
setInfo(undefined) // error
setInfo(false) // error
类型断言
在某些时候你会比ts更加了解你定义的这个变量是什么类型的值,
类型断言有两种形式。 其一是“尖括号”语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
另一个为as语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。