本帖最后由 NewBee 于 2023-3-21 19:02 编辑
一、TypeScript 的第一性原则:
TypeScript 的第一性原则是添加可选的静态类型。
解释:TypeScript是一种静态类型的编程语言,主要特点之一是静态类型检查!这意味着它在编译时会检查变量和函数的类型,所以在编写代码时必须明确变量的类型。让代码更加可读、可维护和可靠,因为类型错误在编译时就会被发现,而不是在运行时。
二、基本构成元素有哪些?
TypeScript 的基本构成元素包括:变量、常量、函数、类、接口、枚举、类型注解、类型别名、泛型等。
三、变量和常量
如何定义和使用?
在 TypeScript 中,变量和常量可以通过关键字 let 和 const 进行定义。变量可以重新赋值,而常量则不可以。例如:
let x: number = 1; //定义变量
const y: string = "hello"; //定义常量
x = 2; // 合法,x 的值变为 2
y = "world"; // 非法,因为 y 是常量,不能重新赋值
四、函数
如何定义和使用?
在 TypeScript 中,函数可以通过以下方式进行定义:
// 定义一个函数,函数名为 add,接受两个参数 x 和 y,它们的类型都是 number,函数的返回值也是 number 类型。
function add(x: number, y: number): number {
return x + y; // 在函数内部,将 x 和 y 相加,并将结果返回。
}
函数定义中,我们可以 指定 函数的 参数 类型和 返回值 类型,从而提高代码可读性和安全性。
五、类
如何定义和使用?
在 TypeScript 中,类可以通过以下方式进行定义:
// 定义一个名为 Person 的类。
class Person {
// 声明一个私有成员变量 name,类型为 string。
private name: string;
// 定义一个构造函数,接收一个名为 name 的 string 类型参数。
constructor(name: string) {
// 在构造函数内部,将传入的 name 参数赋值给私有成员变量 this.name。
this.name = name;
}
// 定义一个公有成员方法 getName,该方法不接受参数,返回值为 string 类型。
public getName(): string {
// 在方法内部,返回该实例的私有成员变量 name。
return this.name;
}
}
类定义中,我们可以 指定 类的 属性、方法 以及 访问修饰符 等。类的实例化可以通过 new 关键字来创建,例如:
// 假设之前已经定义了 Person 类。
// 创建一个名为 person 的常量,使用 Person 类的构造函数创建一个新的 Person 实例,
// 将名为 "Tom" 的 string 类型参数传递给构造函数。因为 Person 类的构造函数中需要一个名为 name 的参数,
// 所以在实例化 Person 对象时,必须为 name 参数提供一个值。
const person = new Person("Tom");
// 调用 person 对象上的公有方法 getName,返回其 name 属性值,并将该值作为字符串输出到控制台。
console.log(person.getName()); // 输出 "Tom"
六、接口
如何定义和使用?
在 TypeScript 中,接口可以通过以下方式进行定义:
// 定义了一个名为 Shape 的接口。
interface Shape {
// 声明了一个名为 name 的属性,该属性类型为 string。
name: string;
// 声明了一个名为 color 的可选属性,该属性类型为 string。可选属性可以存在,也可以不存在。
color?: string;
// 声明了一个名为 getArea 的方法,该方法不接收参数,返回值为 number 类型。
getArea(): number;
}
接口定义中,我们可以指定接口的属性和方法,并且可以使用 可选属性 和 只读属性 等特性。接口可以用来描述对象的形状,从而提高代码可读性和安全性。
七、枚举
如何定义和使用?
在 TypeScript 中,枚举可以通过以下方式进行定义:
enum Direction {
Up = 1,
Down,
Left,
Right,
}
枚举定义中,我们可以指定枚举值的名称和对应的数值,或者不指定数值时自动从 0 开始递增。枚举可以用来描述一组有限的可能性,从而提高代码可读性和安全性。
八、类型注解、类型别名和泛型
分别是什么?
类型注解:用于指定变量、函数、类等元素的类型,例如: let x: number = 1 ;
类型别名:用于给一个类型起一个别名
泛型:在定义函数、类等元素时使用类型参数,使得这些元素可以处理多种不同类型的数据。例如:
// 定义一个泛型函数 identity,使用类型参数 T 表示参数的类型
function identity<T>(arg: T): T { //泛型函数identity,它接受一个类型为T的参数arg
return arg; // 返回传入的参数arg的值,类型为 T
}
// 调用泛型函数 identity,将字符串 "hello world" 作为参数传递,显式指定类型参数为 string
// 函数返回值类型为 string,因为传入的参数类型为 string
let result = identity<string>("hello world");
|