TypeScript 类型

TypeScript 支持对基本类型(原始类型和对象类型)进行类型检查。 它还支持泛型,装饰器和 ES6 模块类型。 重要的是要知道 TypeScript 中的类型系统设计为***可选***。 因此,所有 javascript 程序也都是 TypeScript 程序。

Table of Contents

Static types
	- Primitive Types
	- Object Types
Generics
Decorators

1)静态类型

在语言语义和类型系统的上下文中,静态类型通常表示“在编译时”或“不运行程序”,而动态表示“在运行时”。 在静态类型语言中,变量,参数和对象成员具有编译器在编译时就知道的类型。 编译器可以使用该信息执行类型检查并优化编译的代码。

TypeScript 中的静态类型可以分为两个子类型:

1.1)基本类型

TypeScript 具有 5 种主要基本类型,即numberstringbooleanvoidany

number

用于定义类型为number的变量。

				let num: number = 123;
				num = 123.456;
				num = '123'; 	// Error

string

用于定义string类型的变量。

				let str: string = 'hello';
				str = 'world';
				str = 123; 	// Error

boolean

用于定义boolean类型的变量。

				let bool: boolean = false;
				bool = true;
				bool = 123; 	// Error

void

  1. 用于函数返回类型以表示非返回函数。

    			function warnUser(): void {
    			    alert("This is my warning message");
    			}
    
    
  2. 声明 void 类型的变量没有用,因为只能将 undefinednull 分配给它们。

    			let tempVar: void = undefined;
    			tempVar = null;		
    
    			tempVar = 123;		//Error
    
    

any

当您想退出类型检查并让值通过编译时检查时,请使用any

				let val: any = 'hello';

				val = 123; 		// OK

				val = true; 	// OK

|

1.2)对象类型

TypeScript 支持以下对象类型。

数组

数组是相同数据类型的值的集合。

			var names:string[];	//declaration 

			names = ["how","to","do","in","java"];	//initialization

元组

元组就像数组; 但存储“不同数据类型”的值。 就像数组一样,它也是基于索引的数据结构。

			var items;	//declaration 

			items = ["how", 2, "do", 1 , true];	//initialization

接口

接口定义派生成员类必须实现的属性,方法和事件。

			interface ICalc { 
				add (first: number, second: number): any;
			} 

			let Calculator: ICalc = {
				add(first: number, second: number) {
					return first + second;
				}
			}

类是用于创建对象的模板。 Typescript 从 ES6 获得对类的支持。

			class Person { 

			   //field 
			   name:string; 

			   //constructor 
			   constructor(name:string) { 
			      this.name = name; 
			   }  

			   //function 
			   speakName():void { 
			      console.log("Name is  :   "+this.name) 
			   } 
			}

枚举

与其他编程语言一样,枚举是由一组命名值组成的数据类型。 名称通常是充当常量的标识符。 ES6 中引入了枚举。

			enum Direction {
			    Up,
			    Down,
			    Left,
			    Right
			}

			let go: Direction;
			go = Direction.Up;

函数

在 TypeScript 中,我们可以声明仅在函数生命期内指向函数的变量。

				let fun: Function = () => console.log("Hello");

				fun = 123; //Error

2)泛型

泛型允许创建一个可以在多种类型而不是单个类型上工作的组件。 例如:

function throwBack<T>(arg: T): T {	//Function return the parameter as it is
    return arg;
}

let outputStr = identity<string>("myString"); 	//OK

let outputNum = identity<number>( 100 ); 		//OK

3)装饰器

一般而言,装饰器是注解。 它们与'@'符号一起使用。 它允许我们修饰类和函数,类似于 java 中的注解和 python 中的装饰器。

装饰器是一项新功能,很可能会纳入 JavaScript 的 ES7 版本。 但是该功能在 TypeScript(实验性)中可用,因此我们已经可以使用它了。

如何使用装饰器

了解每个装饰器都是 javascript 函数,这一点很重要。 要创建装饰器,请创建如下函数:

function printable ( target ) {
	Object.defineProperty(target.prototype, 'print', {value: () => "Lokesh Gupta"});
}

@printable
class Person {

}

let admin = new Person();
console.log(admin.print()); // Lokesh Gupta

TypeScript 中的类型系统就这些了。 将我的问题放在评论部分。