ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# TypeScript 类型 > 原文: [https://howtodoinjava.com/typescript/typescript-types/](https://howtodoinjava.com/typescript/typescript-types/) TypeScript 支持对基本类型(原始类型和对象类型)进行类型检查。 它还支持泛型,装饰器和 ES6 模块类型。 重要的是要知道 TypeScript 中的类型系统设计为***可选***。 因此,所有 javascript 程序也都是 TypeScript 程序。 ```java Table of Contents Static types - Primitive Types - Object Types Generics Decorators ``` ## 1)静态类型 在语言语义和类型系统的上下文中,**静态类型通常表示“在编译时”**或“不运行程序”,而**动态表示“在运行时”**。 在静态类型语言中,变量,参数和对象成员具有编译器在编译时就知道的类型。 编译器可以使用该信息执行类型检查并优化编译的代码。 TypeScript 中的静态类型可以分为两个子类型: #### 1.1)基本类型 TypeScript 具有 5 种主要基本类型,即`number`,`string`,`boolean`,`void`和`any`。 `number` 用于定义类型为`number`的变量。 ```java let num: number = 123; num = 123.456; num = '123'; // Error ``` `string` 用于定义`string`类型的变量。 ```java let str: string = 'hello'; str = 'world'; str = 123; // Error ``` `boolean` 用于定义`boolean`类型的变量。 ```java let bool: boolean = false; bool = true; bool = 123; // Error ``` `void` 1. 用于函数返回类型以表示非返回函数。 ```java function warnUser(): void { alert("This is my warning message"); } ``` 2. 声明 `void` 类型的变量没有用,因为只能将 `undefined` 或 `null` 分配给它们。 ```java let tempVar: void = undefined; tempVar = null; tempVar = 123; //Error ``` `any` 当您想退出类型检查并让值通过编译时检查时,请使用`any`。 ```java let val: any = 'hello'; val = 123; // OK val = true; // OK ``` | #### 1.2)对象类型 TypeScript 支持以下对象类型。 数组 数组是**相同数据类型**的值的集合。 ```java var names:string[]; //declaration names = ["how","to","do","in","java"]; //initialization ``` 元组 元组就像数组; 但存储“不同数据类型”的值。 就像数组一样,它也是基于索引的数据结构。 ```java var items; //declaration items = ["how", 2, "do", 1 , true]; //initialization ``` 接口 接口定义派生成员类必须实现的属性,方法和事件。 ```java interface ICalc { add (first: number, second: number): any; } let Calculator: ICalc = { add(first: number, second: number) { return first + second; } } ``` 类 类是用于创建对象的模板。 Typescript 从 ES6 获得对类的支持。 ```java class Person { //field name:string; //constructor constructor(name:string) { this.name = name; } //function speakName():void { console.log("Name is : "+this.name) } } ``` 枚举 与其他编程语言一样,枚举是由一组命名值组成的数据类型。 名称通常是充当常量的标识符。 ES6 中引入了枚举。 ```java enum Direction { Up, Down, Left, Right } let go: Direction; go = Direction.Up; ``` 函数 在 TypeScript 中,我们可以声明仅在函数生命期内指向函数的变量。 ```java let fun: Function = () => console.log("Hello"); fun = 123; //Error ``` ## 2)泛型 泛型允许创建一个可以在多种类型而不是单个类型上工作的组件。 例如: ```java 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 函数**,这一点很重要。 要创建装饰器,请创建如下函数: ```java 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 中的**类型系统就这些了**。 将我的问题放在评论部分。 学习愉快!