TypeScript基础篇 - TS日常类型 下篇
发布人:shili8
发布时间:2025-02-21 18:55
阅读次数:0
**TypeScript基础篇 - TS日常类型**
下篇:类型系统的基本概念、类型推断、类型注解等内容。
---
在上一篇文章中,我们已经了解了 TypeScript 的基本概念、变量声明、数据类型等内容。今天我们将继续讨论 TypeScript 中的类型系统,包括类型推断、类型注解、泛型等内容。
###1. 类型推断TypeScript 提供了一个叫做类型推断(type inference)的功能,它可以自动地为变量或表达式推断出其类型。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的初学者中。
下面是一个例子:
typescriptlet a =10; // 类型推断为 numberconsole.log(a); // 输出:10let b = 'hello'; // 类型推断为 stringconsole.log(b); // 输出:hello
在上面的例子中,我们没有显式地声明变量 `a` 和 `b` 的类型,TypeScript 会自动地根据赋值的内容来推断出其类型。
###2. 类型注解虽然 TypeScript 提供了类型推断功能,但是有时我们可能需要手动地指定某个变量或表达式的类型。这就是类型注解(type annotation)的作用。
下面是一个例子:
typescriptlet a: number =10; // 指定类型为 numberconsole.log(a); // 输出:10let b: string = 'hello'; // 指定类型为 stringconsole.log(b); // 输出:hello
在上面的例子中,我们使用 `:` 来指定变量 `a` 和 `b` 的类型。
###3. 泛型泛型(generic)是 TypeScript 中一个非常强大的功能,它允许我们创建可以处理多种类型的函数或类。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescriptfunction identity<T>(arg: T): T { return arg; } console.log(identity<number>(10)); // 输出:10console.log(identity<string>('hello')); // 输出:hello
在上面的例子中,我们使用泛型 `T` 来创建一个函数 `identity`,这个函数可以处理多种类型的参数。
###4. 类型别名类型别名(type alias)是 TypeScript 中的一个功能,它允许我们给某个类型起一个新的名字。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescripttype StringOrNumber = string | number; let a: StringOrNumber = 'hello'; // 类型为 stringconsole.log(a); // 输出:hellolet b: StringOrNumber =10; // 类型为 numberconsole.log(b); // 输出:10
在上面的例子中,我们使用类型别名 `StringOrNumber` 来给某个类型起一个新的名字。
###5. 联合类型联合类型(union type)是 TypeScript 中的一个功能,它允许我们创建一个可以包含多种类型的值。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescripttype StringOrNumber = string | number; let a: StringOrNumber = 'hello'; // 类型为 stringconsole.log(a); // 输出:hellolet b: StringOrNumber =10; // 类型为 numberconsole.log(b); // 输出:10
在上面的例子中,我们使用联合类型 `StringOrNumber` 来创建一个可以包含多种类型的值。
###6. 交叉类型交叉类型(intersection type)是 TypeScript 中的一个功能,它允许我们创建一个可以包含多个类型的值。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescripttype StringOrNumber = string & number; let a: StringOrNumber = 'hello'; // 类型为 stringconsole.log(a); // 输出:hellolet b: StringOrNumber =10; // 类型为 numberconsole.log(b); // 输出:10
在上面的例子中,我们使用交叉类型 `StringOrNumber` 来创建一个可以包含多个类型的值。
###7. null 和 undefinednull 和 undefined 是 TypeScript 中两个特殊的类型,它们分别表示空值和未定义值。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescriptlet a: null = null; // 类型为 nullconsole.log(a); // 输出:nulllet b: undefined = undefined; // 类型为 undefinedconsole.log(b); // 输出:undefined
在上面的例子中,我们使用类型 `null` 和 `undefined` 来表示空值和未定义值。
###8. nevernever 是 TypeScript 中一个特殊的类型,它表示永远不会发生的值。这种功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。
下面是一个例子:
typescriptfunction error(message: string): never { throw new Error(message); } error('Something went wrong'); // 永远不会返回
在上面的例子中,我们使用类型 `never` 来表示永远不会发生的值。
---
本篇文章我们讨论了 TypeScript 中的类型系统,包括类型推断、类型注解、泛型等内容。这些功能在 TypeScript 中非常有用,尤其是在使用 TypeScript 的高级开发者中。通过阅读本篇文章,你应该能够理解 TypeScript 中类型系统的基本概念,并且能够应用这些功能来创建更复杂和更强大的 TypeScript代码。
如果你有任何问题或疑问,请随时在评论区留言,我们将尽快回复并帮助你解决问题。