TypeScript 类型
TypeScript 类型
TypeScript 支持对基本类型(原始类型和对象类型)进行类型检查。 它还支持泛型,装饰器和 ES6 模块类型。 重要的是要知道 TypeScript 中的类型系统设计为***可选***。 因此,所有 javascript 程序也都是 TypeScript 程序。
Table of Contents
Static types
- Primitive Types
- Object Types
Generics
Decorators
1)静态类型
在语言语义和类型系统的上下文中,静态类型通常表示“在编译时”或“不运行程序”,而动态表示“在运行时”。 在静态类型语言中,变量,参数和对象成员具有编译器在编译时就知道的类型。 编译器可以使用该信息执行类型检查并优化编译的代码。
TypeScript 中的静态类型可以分为两个子类型:
1.1)基本类型
TypeScript 具有 5 种主要基本类型,即number
,string
,boolean
,void
和any
。
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
用于函数返回类型以表示非返回函数。
function warnUser(): void { alert("This is my warning message"); }
声明
void
类型的变量没有用,因为只能将undefined
或null
分配给它们。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 中的类型系统就这些了。 将我的问题放在评论部分。