这两天出去面试发现他们都不怎么问ts,可能ts还没有广泛的使用
ts的优势:编译时静态检测(比如定义了字符串类型,使用foreach方法会提示没有这个方法),避免传参和变量赋值不匹配出现编译错误,代码提示更清晰(比如定义了一个obj,编写时会提示它的属性),使用泛型和一些ts特有的类型,ts中的声明文件目录清晰直观展示依赖的接口、type等,即使ts文件有错误大多说情况也可以编译成js,灵活性高虽然是强类型检查语言也提供了any和阿是any断言
下面准备开一个专题也是对自己ts这块的使用和总结
// 类型注解
interface Student {
name: string,
age: number
}
let data: number = 2;
let obj: Student = {
name: '2',
age: 3
}
// 类型推导
let age = false;
类型注解就是从左边定义约束 类型推导就是右边约束
常用的数据类型
// 基本类型
// number string boolean symbol null undefined
// 根类型这两个是一样的
// Object {}
// 对象类型
// Array object function
// 枚举
// enum
// 其他特殊类型
// any unknown never void tuple 可变元组
// 合成类型
// 联合类型 交叉类型
// 字面量数据类型
注意事项Object做为根类型不可以赋值
let data: Object = undefined
let data: Object = null
上述是错误的
联合类型( | )、交叉类型( & ) 字面量数据类型
// 联合类型
let str: string | number = 1
console.log(str)
// 交叉类型
type obj3 = { username: string }
type obj4 = { age: number }
let obj33: obj3 & obj4 = { username: '哈哈', age: 3 }
// 字面量数据类型
type A = number | string
let a: A = 4
type num = number
let n: num = 4
type aa = 1 | 2 | 3
let aa: aa = 3
type flag = 0 | 1
// never 类型存在的意义是写出类型绝对安全的代码
// 比如
type GradeType = "A" | "B" | "C" | "D"
function consoleGrade(grade: GradeType) {
if (grade == "A") {
console.log("优秀")
} else if (grade == "B") {
console.log("良好")
} else if (grade == "C") {
console.log("中等")
} else if (grade == "D") {
console.log("及格")
} else {
let data = grade // never类型预留
}
}
枚举类型的定义和访问,字符串枚举和数字枚举的区别
// 数字枚举
enum HH {
one = 1,
two,
three
}
console.log(HH.two, HH[2])
// 字符串枚举
enum HHString {
one = "一",
two = "二",
three = "三"
}
console.log(HHString.two)
为啥字符串枚举不能通过值访问看编译后的代码
"use strict";
// 数字枚举
var HH;
(function (HH) {
HH[HH["one"] = 1] = "one";
HH[HH["two"] = 2] = "two";
HH[HH["three"] = 3] = "three";
})(HH || (HH = {}));
console.log(HH.two, HH[2]);
// 字符串枚举
var HHString;
(function (HHString) {
HHString["one"] = "\u4E00";
HHString["two"] = "\u4E8C";
HHString["three"] = "\u4E09";
})(HHString || (HHString = {}));
console.log(HHString.two);