typescirpt 知识点

基础类型

常见类型

就是变量类型声明,和.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中nullundefined变量是可以单独声明的,但是他们本身的用处并没有想象中那么大,但是可以直接复制给其他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表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。简单来讲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语法断言是被允许的。

原文地址:https://www.cnblogs.com/HondryTravis/p/11138186.html