typescript简介
typescript是javascript的超集,我的理解。typescript可以达到像java一样的代码风格,我比较喜欢。
基础类型
-
布尔值
let isDone:boolean =true;
-
数字
let nums:number=123;
-
字符
let str:string=“字符”; -
数组
let arr:number[]=[1,2,3]
let list: Array< number> = [1, 2, 3]; -
元组 Tuple
// Declare a tuple type
let x: [string, number];
// Initialize it
x = [‘hello’, 10]; // OK
// Initialize it incorrectly
x = [10, ‘hello’]; // Error -
枚举
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green; -
any
如果不想让类型检查器对这些值进行检查
let notSure: any = 4;
notSure = “maybe a string instead”;
notSure = false; -
Void
表示没有任何类型
function warnUser(): void {
console.log(“This is my warning message”);
} -
Object
let o: object={0:0}
变量声明
- let 声明
let 声明的变量的作用域是块级作用域,也就是说包含它们的块或for循环之外是不能访问的。它可以保护私有变量,可以理解为一个简单的闭包
function f(input: boolean) {
let a = 100;
if (input) {
// 可以读取到a的值
let b = a + 1;
return b;
}
// 这里读取不到b的值
return b;
}
- const声明
const是对let的一个增强,它能阻止对一个变量再次赋值。
接口
TypeScript的核心原则之一是对值所具有的结构进行类型检查。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。可以实现类似java的接口,接口可实现,也可被类继承。
-
基本接口和可选属性接口
interface LabelledValue { label?: string//加入问号。讲属性变为可选属性 size?:10 } function printLabel(labelledObj: LabelledValue) { console.log(labelledObj.label); } let myObj = {size: 10, label: "Size 10 Object"};//接口定义了的属性,外部必须传入,除非将其属性变为可选属性则可以不传 printLabel(myObj);
-
只读属性
一些对象要求在创建了之后就不可修改了,可将接口的属性变为readonly。interface LabelledValue { readonly label?: string readonly size?:10 }
-
实现接口
与Java里接口的基本作用一样,TypeScript也能够用它来明确的强制一个类去符合某种契约。interface ClockInterface { currentTime: Date; setTime(d: Date); } class Clock implements ClockInterface { currentTime: Date; setTime(d: Date) { this.currentTime = d; } constructor(h: number, m: number) { } }
在类里面可以实现接口里面的方法
上面的写法编译成浏览器可识别的代码为:var Clock = /** @class */ (function () { function Clock(h, m) { } Clock.prototype.setTime = function (d) { this.currentTime = d; }; return Clock; }());
总结
从这三个章节来看,ts可以让我们拥有和java类似的强类型检查机制,但还达不到java的强度,将类和接口的概念引入,书写的代码更具备可读性。更容易理解,更利于对代码的设计和管理。