参考官网”https://www.tslang.cn/docs/handbook/typescript-in-5-minutes.html
运行过程
ts文件要转化为JS文件才能运行,这一阶段是需要编译器的。
编译命令:
tsc 文件名.ts (编译单个文件)
tsc file1.ts file2.ts file3.ts(编译多个文件)
特点
类型注解
比JS多了一个可以对类型进行判断的功能。
比如:
function greeter(person: string) {
return "Hello, " + person;
}
对person参数有限定
接口
这里我们使用接口来描述一个拥有firstName和lastName字段的对象。 在TypeScript里,只在两个类型内部的结构兼容那么这两个类型就是兼容的。
这就允许我们在实现接口时候只要保证包含了接口要求的结构就可以,而不必明确地使用 implements语句。
比如:
interface Person {
firstName: string;
lastName: string;
}
function greeter(person: Person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
类
TypeScript支持JavaScript的新特性,比如支持基于类的面向对象编程。
所以有时候选用interface还是选class是要看看的。
类是构造函数和公共字段构成的, 注意类和接口可以一起共作,程序员可以自行决定抽象的级别。
还要注意的是,在构造函数的参数上使用public等同于创建了同名的成员变量。
class Student {
fullName: string;
constructor(public firstName, public middleInitial, public lastName) {
this.fullName = firstName + " " + middleInitial + " " + lastName;
}
}
interface Person {
firstName: string;
lastName: string;
}
function greeter(person : Person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
let user = new Student("Jane", "M.", "User");
document.body.innerHTML = greeter(user);
这里的函数参数传入的虽然是一个继承Person接口的类,而student又没有显式地表明实现了这个接口,但是是可以传入的。
-
感觉是只要看里面内部的属性firstname和lastname是存在且类型正确吧。
关于ts的类与继承的细节还要看看是否有一些特别之处。 -
学习完接口后就明白了, TS的核心原则之一是对值所具有的结构进行类型检查,类型检查器会查看传入的user的结构是否满足有firstName 和 lastName这两个属性,并且其类型匹配。而不需要像其他语言那样,一定要传入的user参数实现了Person这个接口。
(本身TS接口的诞生意义和其他语言是有偏差的)