TypeScript基本类型之typeof和keyof详解

TypeScript基本类型之typeof和keyof详解

在TypeScript中,typeof和keyof是两个非常重要的基本类型运算符。typeof可用于获取变量的类型,而keyof可用于获取对象类型的键类型。

typeof

typeof可用于获取变量的类型,其语法为:

typeof x

这里的x可以是任意类型的变量、对象或函数,返回结果为x的类型。

示例1

let x = 10;
let y: typeof x = 20;
console.log(y); //20

在上面的例子中,我们定义了变量x,并将其赋值为10。然后我们定义变量y,并将其类型设为typeof x。这时,y的类型就会被自动推导为number,因为x是一个number类型的变量。

示例2

function foo(x: string): string {
  return x + '!';
}

let y: typeof foo = (x: string): string => {
  return x + '?';
}

console.log(foo('hello')); //hello!
console.log(y('hello')); //hello?

在上面的例子中,我们定义了函数foo,并将其类型设为(x: string) => string,即一个接收一个string类型参数并返回一个string类型结果的函数。

然后我们定义变量y,并将其类型设为typeof foo。这时,y的类型就会被自动推导为(x: string) => string,与foo的类型相同。然后我们用一个箭头函数表达式实现了一个与foo具有相同类型的函数,再将其赋值给了y。最后我们打印出foo和y的结果,可以发现它们分别输出"hello!"和"hello?"。

keyof

keyof可用于获取对象类型的键类型,其语法为:

keyof T

这里的T是一个对象或类类型,返回结果为T的键类型。

示例1

interface Person {
  name: string;
  age: number;
}

let x: keyof Person = 'name';
let y: keyof Person = 'age';
let z: keyof Person = 'email'; //编译错误:类型 '"email"' 的值不能赋给类型 '"name" | "age"'。

在上面的例子中,我们定义了一个接口类型Person,包含两个属性name和age。然后我们定义了三个变量:x、y、z,它们的类型都是keyof Person,即T的键类型。

我们可以发现,变量x的值为"name",变量y的值为"age",而变量z的值为"email",因为"email"并不是Person类型的键,所以它会被TypeScript认为是一个错误。

示例2

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  sayHi() {
    console.log(`Hi, my name is ${this.name}, and I am ${this.age} years old.`);
  }
}

let x: keyof Person = 'name';
let y: keyof Person = 'age';
let z: keyof Person = 'email'; //编译错误:类型 '"email"' 的值不能赋给类型 '"name" | "age"'。

在上面的例子中,我们定义了一个类Person,包含两个属性name和age,以及一个方法sayHi。方法sayHi会输出一个包含类属性的字符串。

然后我们定义了三个变量:x、y、z,它们的类型都是keyof Person,即T的键类型。

我们可以发现,变量x的值为"name",变量y的值为"age",而变量z的值为"email",因为"email"并不是Person类型的键,所以它会被TypeScript认为是一个错误。

最后我们可以实例化一个Person对象,并在其上调用sayHi方法,从而输出一个形如"Hi, my name is Tom, and I am 25 years old."的字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TypeScript基本类型之typeof和keyof详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js websocket使用socket.io库实现实时聊天室

    我很乐意为您讲解“Node.js websocket使用socket.io库实现实时聊天室”的完整攻略。 1. Node.js安装 首先,我们需要在本地环境安装Node.js,Node.js是使用JavaScript开发服务器端应用程序的自由和开源的跨平台JavaScript运行环境。具体的安装方法可以在Node.js官网(https://nodejs.or…

    node js 2023年6月8日
    00
  • NodeJs中express框架的send()方法简介

    下面是关于“NodeJS中Express框架的send()方法”的详细讲解。 什么是send()方法 在Express框架中,send()方法是常用的响应方法之一。它被用来向客户端发送HTTP响应。它可以发送任何类型的响应,包括HTML、JSON、XML、文本等。此外,send()方法还可以根据响应内容自动设置Content-Type响应头,这是非常方便的。…

    node js 2023年6月8日
    00
  • JS在IE下缺少标识符的错误

    JS在IE下缺少标识符错误通常是由于代码中缺少分号导致的。这个错误在其他浏览器中可能不会出现,但在IE浏览器中会非常常见。下面是了解该错误以及如何解决该错误的完整攻略: 1.了解“JS在IE下缺少标识符的错误”是什么 当在IE浏览器中使用某些JavaScript代码时,可能会看到以下错误消息:缺少标识符。这是因为IE在JavaScript代码中有一个分号缺失…

    node js 2023年6月8日
    00
  • 在Linux服务器上部署vue项目

    部署vue项目到Linux服务器上主要需要完成以下几个步骤: 在本地使用npm等工具完成vue项目构建 将构建好的项目文件上传至Linux服务器 在Linux服务器上安装Nginx等Web服务器,并配置Web服务器 将上传的项目文件部署到Web服务器上 启动Web服务器,访问部署在服务器上的vue项目 下面,我将详细讲解每个步骤的具体操作流程: 1. 在本地…

    node js 2023年6月8日
    00
  • 详解原生js实现offset方法

    下面是详解“详解原生js实现offset方法”的完整攻略。 什么是offset方法 offset() 是 jQuery 中的一个方法,用于获取元素相对于文档的偏移量。而原生 JavaScript 没有提供类似的方法,所以我们需要自己实现它。 实现offset方法的基本思路 获取元素本身的left、top值 获取元素的 offsetParent 元素,不断循环…

    node js 2023年6月8日
    00
  • 使用TS来编写express服务器的方法步骤

    使用TS来编写Express服务器的步骤如下: 安装必要的工具和依赖项 首先,需要确保本地安装了Node.js和TypeScript。如果没有安装,可以前往官网下载并按照步骤进行安装。然后,需要安装Express和相关的TypeScript库。运行以下命令: npm install express @types/express ts-node typescr…

    node js 2023年6月8日
    00
  • Ajax异步文件上传与NodeJS express服务端处理

    一、介绍本文将讲解如何使用Ajax异步上传文件并在NodeJS的express服务端进行处理。本文将分为以下步骤:1. 简单介绍Ajax异步上传文件的原理;2. 编写客户端的HTML、CSS、JavaScript代码实现文件上传功能;3. 编写服务端的NodeJS express代码实现文件上传后的处理;4. 给出两个实例供读者参考。 二、原理Ajax异步上…

    node js 2023年6月8日
    00
  • nodejs开发一个最简单的web服务器实例讲解

    下面是详细讲解“nodejs开发一个最简单的web服务器实例讲解”的完整攻略。 什么是Node.js Node.js是一种基于Chrome V8引擎的开源平台,用于轻松构建快速、可扩展的网络应用程序。它是一个可以在服务器端运行JavaScript代码的运行时环境。 开发一个最简单的web服务器实例 在Node.js中,使用http模块就可以轻松地创建一个最简…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部