数据类型
JS 七种类型 + 枚举 + any + void + never
1、 枚举(enum)
可以这样理解,你要给Gender赋值"man"或"woman"(因为性别只能有这两种),但是你手抖打成了"men",但是系统却不知道你打错了,所以这时,我们就用枚举,把有限的属性放进枚举里,你的值只能从枚举里来取;
enum Gender {
Man = 'man',
Woman = 'woman',
}
let gender: Gender = Gender.Man
console.log(gender);
gender = Gender.Woman;
console.log(gender);
null和undefined可以赋给任意类型的值,在ts里,null和undefined没有任何区别;
let a: number = null
- js特别喜欢悄悄地转换类型,但ts特别讨厌悄悄地转换类型;
-
执行一行代码需要多长时间呢?差不多是ns级的(10的-9次方秒);看下图,执行一万次for循环,仅需要0.2ms;
image.png
接口
- C#和ts的编写者是同一个人(海尔斯伯格),所以ts很多地方都和C#很像;
先看一个问题,请问函数和方法有什么区别?
答: 当一个函数是一个对象的属性时,我们称这个函数是该对象的方法;
1、基础定义
- 接口就是用代码描述一个对象必须有什么属性(包括方法),但是有没有其他属性就不管了。
- 声明变量使用接口的时候,变量参数必须和接口中的参数一致,不能多也不能少;
- interface中的每个属性用";"结尾;
interface Human{
name: string;
age: number;
}
let winwin: Human = {name: 'winwin', age: 1}
2、只读属性readonly
interface Human{
readonly name: string;
age: number;
}
let winwin: Human = {name: 'winwin', age: 18}
winwin.name = 'lucas' //这句话就是错的,因为name是只读属性,不可对它再次写入;
3、可选属性
- 如果有些参数不是必须要定义的,就用
?:
,即name?: string
,那么name就是可写可不写的;
4、有一个属性是函数
interface Human{
name: string;
age: number;
add(a:number, b:number): number; //这个属性是函数
}
5、那如果这个对象本身是函数怎么办
- 不写名字的函数属性,就是对象本身
interface SearchFunc {
(source: string, subString: string): boolean;
}
6、如果这个对象是个函数,而且这个对象的属性也是一个函数该怎么写呢?
- 没有名字的函数是对象本身的函数,有名字的函数是这个对象的属性;
interface 二则运算 {
(a: number, b: number): number;
逆运算(a: number, b: number): number;
}
let fn = (): 二则运算 => {
let x: any = function(a: number, b: number): number {
return a + b;
};
x.逆运算 = function(a: number, b: number): number {
return a - b;
};
return x;
}
let add: 二则运算 = fn();
console.log(add(1, 2)); //3
console.log(add.逆运算(2,1)); //1
7、这个对象是数组怎么办
interface StringArray {
[index: number]: string;
}
let myArray: StringArray = ["Bob", "Fred"]
let myStr: string = myArray[0];
8、继承
- 一个interface可以继承多个interface;
- 一个interface还可以继承一个继承了interface的接口;
interface Shape {
color: string;
}
interface fill {
filled: boolean
}
interface Square extends Shape,fill {
sideLength: number;
}
let square: Square = {
color: "red",
sideLength: 20,
filled: false
}
测试题
test.png
interface A {
num: number;
b: boolean;
str: string;
optional?: string;
add(n1: number, n2:number): number;
readonly r: string;
}