ts是js的超集,是js更严格的严格版本。ts添加了静态类型系统和编译时的一些特性。
主要的联系和区别:
- 类型系统。js是动态类型的语言,不需要在代码中声明变量的类型;ts使用了静态类型系统,在代码中必须明确的声明所有变量的类型,这有利于发现错误,可使大型代码库更容易维护。
- 编译。ts需要经过编译才可以在浏览器或node中运行,它需要先转换成js代码在运行。
- 可扩展性。因为ts是js的超集,所以可以将现有的js项目迁移到ts,不需要重写整个代码。
- 类型安全。静态类型系统,可以使ts代码在编译阶段就可以发现错误,不需要等到运行时才发现。
- 高级类型。ts支持泛型、接口等,这可以使代码更加可维护。
接口在ts中用来定义对象的结构及属性的类型。使用interface定义
//定义接口 interface Person { name string; age number; eat(food string):string } //使用接口 class Student implements Person { name:string; age:number; constructor(name:string,age:number){ this.name = name; this.age = age; } eat(food:string){ return food; } }
泛型可以用来在定义函数、接口、类时不提前指定具体的类型,而是在使用的时候为其指定类型。
function fn <T> (x:T,y:T): T{ return x + y; } fn<number>(1,2)
any类型表示任何值都可以,它会关闭编译器的类型检查,使用any类型,变量可以被赋值为任意类型。
unknown表示一个未知的值,比any更严格。使用unknown时不可以直接访问其内部属性,需要进行类型断言。这样可以增加类型安全性。
const x:unknown = new Person(); // x.name; 这种方法是错误的 const y = <any> x; //类型断言 x.name;
枚举类型:用于表示一组命名的常量值。
//定义枚举 enum Color { Red = 1, Blue = 2, Green = 3 } let bg:Color; bg = Color.Red;