TypeScript keyof
keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型。它主要用于在类型系统中引用对象类型的键。
以下是一些 keyof 的用法和示例:
1. 获取对象类型的键:
type Person = {
name: string;
age: number;
};
type KeysOfPerson = keyof Person;
// KeysOfPerson 的类型为 "name" | "age"
在这个例子中,keyof Person 返回的是字符串字面量类型 "name" | "age",表示 Person 对象类型的所有键。
2. 用于函数参数类型的推断:
type Person = {
name: string;
age: number;
};
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const person: Person = {
name: "John",
age: 30
};
const personName: string = getProperty(person, "name");
const personAge: number = getProperty(person, "age");
在这个例子中,K extends keyof T 表示 K 必须是类型 T 的键。这样,在函数中使用 T[K] 就能够获取对象 obj 中键为 key 的属性的类型。
3. 类型安全的属性访问:
type Person = {
name: string;
age: number;
};
function logProperty<T, K extends keyof T>(obj: T, key: K): void {
console.log(obj[key]);
}
const person: Person = {
name: "John",
age: 30
};
logProperty(person, "name"); // 输出: John
logProperty(person, "age"); // 输出: 30
logProperty(person, "address"); // Error: "address" 不是 Person 的键
在这个例子中,使用 keyof 进行属性访问,使得在编译时就能够捕获可能的错误,例如尝试访问不存在的属性。
总的来说,keyof 是 TypeScript 中用于处理对象类型键的一种强大的工具,它在很多情况下能够提高代码的类型安全性。
TypeScript keyof的更多相关文章
- TypeScript keyof typeof All In one
TypeScript keyof typeof All In one keyof typeof refs https://www.typescriptlang.org/docs/handbook/re ...
- [TypeScript] Query Properties with keyof and Lookup Types in TypeScript
The keyof operator produces a union type of all known, public property names of a given type. You ca ...
- Angular2+typescript+webpack2(支持aot, tree shaking, lazy loading)
概述 Angular2官方推荐的应该是使用systemjs加载, 但是当我使用到它的tree shaking的时候,发现如果使用systemjs+rollup,只能打包成一个文件,然后lazy loa ...
- angular2 学习笔记 (Typescript)
1.接口奇葩验证 interface Abc { name : string } function abc(obj : Abc) { } let ttc = { name: "adad&qu ...
- TypeScript 零基础入门
前言 2015 年末看过一篇文章<ES2015 & babel 实战:开发 npm 模块>,那时刚接触 ES6 不久,发觉新的 ES6 语法大大简化了 JavaScript 程序的 ...
- TypeScript中的怪语法
TypeScript中的怪语法 如何处理undefined 和 null undefined的含义是:一个变量没有初始化. null的含义是:一个变量的值是空. undefined 和 null 的最 ...
- JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)
在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- Typescript高级类型与泛型难点详解
最近做的TS分享,到了高级类型这一块.通过琢磨和实验还是挖掘出了一些深层的东西,在此处做一下记录,也分享给各位热爱前端的小伙伴. 其实在学习TS之前就要明确以下几点: 1. typescrip ...
- 如何编写 Typescript 声明文件
使用TypeScript已经有了一段时间,这的确是一个好东西,虽说在使用的过程中也发现了一些bug,不过都是些小问题,所以整体体验还是很不错的. TypeScript之所以叫Type,和它的强类型是分 ...
随机推荐
- background-blend-mode
由于 mix-blend-mode 这个属性的强大,很多应用场景和动效的制作不断完善和被发掘出来,遂另起一文继续介绍一些使用 mix-blend-mode 制作的酷炫动画. CSS3 新增了一个很有意 ...
- Node中的EventEmitter? 如何实现一个EventEmitter?
一.是什么 我们了解到,Node采用了事件驱动机制,而EventEmitter就是Node实现事件驱动的基础 在EventEmitter的基础上,Node几乎所有的模块都继承了这个类,这些模块拥有了自 ...
- eclipse tomcat的一些错误
eclipse tomcat运行错误 错误提示: Server Tomcat v7.0 Server at localhost was unable to start within 45 second ...
- 力扣614(MySQL)-二级关注者(中等)
题目: 在 facebook 中,表 follow 会有 2 个字段: followee, follower ,分别表示被关注者和关注者. 请写一个 sql 查询语句,对每一个关注者,查询关注他的关注 ...
- 一遇到复杂分析查询就卡顿?MySQL分析实例了解一下
随着企业数据爆发式增长,MySQL分析查询卡顿问题越来越多,用户时效性不能保证,精细化运营诉求不能满足.如何能无缝对接业务库,实现毫秒级针对万亿级数据进行即时的多维分析透视和业务探索,MySQL分析实 ...
- WinDbg 加载 dotnet core 的 sos.dll 辅助调试方法
本文告诉大家如何加载 .NET Core 或 .NET 5 的 sos.dll 文件到 WinDbg 的方法 和 .NET Framework 或 dotnet core 2.0 不相同的是,当前的 ...
- 基于EPCLYPS的DDS控制器(二)
关于ZmodAWGController ZmodAWGController 介绍 双击IP核,进入的第一个界面会有Ch1 Gain Static Configuration的选项修改为 "0 ...
- 一个随时更新的js库
1.src同级建commFunction=>timer.js 2.main.js引入 import time from '../commonFunction/time' Vue.prototyp ...
- 大模型高效微调详解-从Adpter、PrefixTuning到LoRA
一.背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的. 指令微调是预训练语言模型微调的主流范式 其目的是尽量让下游任务的 ...
- Swift File Manager 三种文件路径查找方法对比
目录 1. 引言 2. 三种文件路径查找方法 2. 1 NSSearchPathForDirectoriesInDomains(_:_:_:) 2.2 urls(for:in:) 2.3 url(fo ...