typescript - 打字稿使用泛型类型创建键
问题描述
我正在尝试编写一个通用接口,它接受两种类型,返回的东西Entry, T
和key, K
包含这个的东西。
我不确定这是否可以使用打字稿完成。
有人知道吗?谢谢!
// this is a bad way of doing it
export interface Reconfigure<T> {
title: string
keyOne?: Entry<T>[]
keyTwo?: Entry<T>[]
keyThree?: Entry<T>[]
keyFour?: Entry<T>[]
}
// this is close to what I'd want to do, but doesn't work
export interface Reconfigure<T, K> {
title: string
[K]: Entry<T>[]
}
解决方案
您可以使用映射类型。Record
预定义的类型Partial
应该允许您基于字符串文字类型的联合创建类型。添加类型的固定部分只是使用交集类型 ( &
) 的问题:
export type Reconfigure<T, K extends PropertyKey> = Partial<Record<K, Entry<T>>> & {
title : string
}
type T = Reconfigure<string, "k1" | "k2" | "k4">
// same as
// type T = {
// k1?: Entry<string> | undefined;
// k2?: Entry<string> | undefined;
// k4?: Entry<string> | undefined;
// title: string;
// }
推荐阅读
- node.js - 如何在 Strapi 中使用 CRSF 和 XSS 保护
- algorithm - 光照贴图 UV 生成算法
- node.js - 自动从构建文件夹导出组件
- java - 如何在 Java 中将图像/文件上传到 Firebase 存储?
- oracle - 在 oracle 的触发器中声明和调用变量
- ios - 在 Swift 4.2 中反转字符串
- azure - 在 proxies.json 中使用 Azure 函数设置自定义响应标头
- android - 无法在 Kotlin 中创建 Observable
- javascript - 防止我的所有页面内容调整大小
- caching - 无法让 CloudFront 提供缓存控制标头