欢迎您来到懒之才-站长的分享平台!   学会偷懒,并懒出境界是提高工作效率最有效的方法!
首页 > 经验分享 > Js&Ajax > 一种JavaScript超集的编程语言TypeScript

一种JavaScript超集的编程语言TypeScript

2018-07-31 528 收藏 0 赞一个 0 真差劲 0 去评论

Type是一种由微软开发的自由和开源的编程语言。是一个开源的、跨平台且带有类型系统的Java超集,它可以编译为纯Java,然后运行在任意的浏览器和其他环境中。它使开发者可以使用一些未来Java标准(ECMA 6和7)中的特性。Type为Java添加了可选的静态类型、类和模块,让大型Java应用可以使用更好的工具并拥有更清晰的结构。

2c676a8206694274bfd8fe7ca9c68db0.jpeg

Type的作用

Type扩展了Java的语法,所以任何现有的Java程序可以不加改变的在Type下工作。Type是为大型应用之开发而设计,而编译时它产生 Java 以确保兼容性。

Type 支持为已存在的 Java 库添加类型信息的头文件,扩展了它对于流行的库如 jQuery,MongoDB,Node.js 和 D3.js 的好处。

结合微软开发的开源代码编辑器 Visual Studio Code,使用Type 开发项目具有以下优点:

可以使用最新的 ES2017 语言特性。

非常精准的代码提示。

编辑代码时具有即时错误检查功能,可以避免诸如输错函数名这种明显的错误。

非常精准的代码重构功能。

非常方便的断点调试功能。

编辑器集成调试功能。

语法特性

类 Classes

接口 Interfaces

模块 Modules

类型注解 Type annotations

编译时类型检查 Compile time type checking

Type 中的几种基础类型:

boolean为布尔值类型,如let isDone: Boolean = false

number为数值类型,如let decimal: number = 6;

string为字符串类型,如let color: string = 'blue'

数组类型,如let list: number[] = [ 1, 2, 3 ]

元组类型,如let x: [ string, number ] = [ "hello", 10 ]

枚举类型,如enum Color { Red, Green, Blue }; let c: Color = Color.Green

any为任意类型,如let notSure: any = 4; notSure = "maybe a string instead"

void为空类型,如let unusable: void = undefined

null和undefined

never表示没有值的类型,如function error(message: string): never { throw new Error(message); }

多种类型可以用|隔开,比如number | string表示可以是number或string类型

Arrow 函数 (类似 C# 的 Lambda 表达式)

接口(interface)

以下是接口的几种常见形式:

// 定义具有 color 和 width 属性的对象
interface SuperConfug {
color: string;
width: number;
}
// readonly 表示只读,不能对其属性进行重新赋值
interface Point {
readonly x: number;
readonly y: number;
}
// ?表示属性是可选的,
// [propName: string]: any 表示允许 obj[xxx] 这样的动态属性
interface SquareConfig {
color?: string;
width?: number;
[propName: string]: any;
}
// 函数接口
interface SearchFunc {
(source: string, subString: string): boolean;
}

实际上 Type 的接口还有很多种的表示形式,详细信息可以参考这里:Type Hankbook - Interfaces

函数

以下是几种函数接口的定义方式:

// 普通函数
function add(a: number, b: number): number {
return a + b;
}
// 函数参数
function readFile(file: string, callback: (err: Error | null, data: Buffer) => void) {
fs.readFile(file, callback);
}
// 通过 type 语句定义类型
type CallbackFunction = (err: Error | null, data: Buffer) => void;
function readFile(file: string, callback: CallbackFunction) {
fs.readFile(file, callback);
}
// 通过 interface 语句来定义类型
interface CallbackFunction {
(err: Error | null, data: Buffer): void;
}
function readFile(file: string, callback: CallbackFunction) {
fs.readFile(file, callback);
}

以上几种定义方式有着微妙的差别,还是需要在深入实践 Type 后才能合理地运用。详细信息可以参考这里:Type Handbook - Functions

Type 的类定义跟 Java 的定义方法类型一样,但是增加了public, private, protected, readonly等访问控制修饰符:

class Person {
protected name: string;
constructor(name: string) {
this.name = name;
}
}
class Employee extends Person {
private department: string;
constructor(name: string, department: string) {
super(name);
this.department = department;
}
public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`;
}
}

需要注意的是,这些修饰符仅在 Type 程序中才有效,如果直接使用 Java 是可以在类外部访问到被声明为 private 或者 protocted 的类成员,也可以修改被声明为 readonly 的成员变量。

如果没有指定访问控制关键字,则默认为 public。

泛型

Type 的泛型和接口使得具备较强的类型检查能力的同时,很好地兼顾了 Java 语言的动态特性。以下是使用泛型的简单例子:

function identity(arg: T): T {
return arg;
}
const map = new Map();
map.set('a', 123);
function sleep(ms: number): Promise{
return new Promise((resolve, reject) => {
setTimeout(() => resolve(ms), ms);
});
}

Type 2.0 之后增加了很多泛型相关的语法,比如K extends keyof T这种,对初学者来说理解起来并不容易,平时可能也并不会使用到,详细信息可以参考这里:Type Handbook - Generics

以上便是 Type 相对于 Java 增加的核心内容。

一、推荐使用迅雷或快车等多线程下载软件下载本站资源。

二、未登录会员无法下载,登录后可获得更多便利功能,若未注册,请先注册。

三、如果服务器暂不能下载请稍后重试!总是不能下载,请点我报错 ,谢谢合作!

四、本站大部分资源是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站将不对任何资源负法律责任.如果您发现本站有部分资源侵害了您的权益,请速与我们联系,我们将尽快处理.

五、如有其他问题,请加网站设计交流群(点击这里查看交流群 )进行交流。

六、如需转载本站资源,请注明转载来自并附带链接

七、本站部分资源为加密压缩文件,统一解压密码为:www.aizhanzhe.com

大家评论