typescript - 在 Typescript 中,返回类型值取决于通过参数提供的 Object 中的键
问题描述
我尝试像下面这样返回各种类型取决于输入字符串键,但它不起作用。
如何使getSpecificData
函数返回我想要的类型?
type Data = {
foo: string;
bar: number;
baz: boolean;
};
function getSpecificData<D>(data: D, dataKey: keyof D): D[keyof D] {
return data[dataKey];
}
const sampleData: Data = {
foo: 'hello',
bar: 123,
baz: false,
};
const foo: string = getSpecificData(sampleData, 'foo'); // the function returns string|number|boolean
const bar: number = getSpecificData(sampleData, 'bar');
const baz: boolean = getSpecificData(sampleData, 'baz');
解决方案
为了获取您提供的特定键的值类型,键和值都需要是通用的。 D[keyof D]
是所有可能值类型的联合,但D[K]
会给我们一个给定键的正确值K
。
function getSpecificData<D, K extends keyof D>(data: D, dataKey: K): D[K] {
return data[dataKey];
}
这允许 Typescript 返回与提供的键关联的特定值类型。现在所有这些示例都有效:
const foo: string = getSpecificData(sampleData, 'foo');
const bar: number = getSpecificData(sampleData, 'bar');
const baz: boolean = getSpecificData(sampleData, 'baz');
推荐阅读
- java - 如何修复 pdfbox 中的 FileNotFoundException pdbox.cache EROFS
- javascript - 为什么我的函数将总属性附加到所有单独的数组?
- flutter - 从屏幕右侧将动画翻译到外部
- java - 在流中找到满足该元素的条件的第一个元素
- acumos - Error executing cmn-data-svc-ddl-dml-mysql-2.2-sql during AIO
- ios - Auto-generated Core Data accessor returns deleted objects
- php - Pagesource shows only html tags using phantomjs
- task - 如何在 CCS (Code Composer Studio) 9 上跟踪和分析 FreeRTOS 任务
- c# - 如何从 Configuration Builder 中的 Key Vault 获取密钥的值
- python - Build DataFrame from list of