如何在 TypeScript 中 return 特定类型的对象 属性?
How to return a specific type of object property in TypeScript?
假设我有一个对象中的标志列表,如下所示:
type Flags = {
flag1: string,
flag2: string,
flag3: boolean,
flag4: number
}
// const myFlags: Flags = {
// flag1: 'value 1',
// flag2: 'value 1',
// flag3: true,
// flag4: 12
// }
我想编写一个如下所示的函数 getFlag
:
function getFlag(flag: keyof Flags): any {
// return myFlags[flag]
}
而不是 returning any
,我如何 return 调用 getFlag
的标志类型?
(为了使这更容易,我们可以将标志类型限制为 boolean
、string
和 number
,而不是 return ing boolean | string | number
,我还是想得到具体的属性类型)
将函数设为泛型,以便传入的字符串类型可用于查找对象值的关联类型。
function getFlag<T extends keyof Flags>(flag: T) {
return myFlags[flag]
}
const result = getFlag('flag1');
您可以更进一步 return 使用 as const
的确切类型。
const myFlags = {
flag1: 'value 1',
flag2: 'value 1',
flag3: true,
flag4: 12
} as const;
function getFlag<T extends keyof typeof myFlags>(flag: T) {
return myFlags[flag]
}
const result = getFlag('flag1');
假设我有一个对象中的标志列表,如下所示:
type Flags = {
flag1: string,
flag2: string,
flag3: boolean,
flag4: number
}
// const myFlags: Flags = {
// flag1: 'value 1',
// flag2: 'value 1',
// flag3: true,
// flag4: 12
// }
我想编写一个如下所示的函数 getFlag
:
function getFlag(flag: keyof Flags): any {
// return myFlags[flag]
}
而不是 returning any
,我如何 return 调用 getFlag
的标志类型?
(为了使这更容易,我们可以将标志类型限制为 boolean
、string
和 number
,而不是 return ing boolean | string | number
,我还是想得到具体的属性类型)
将函数设为泛型,以便传入的字符串类型可用于查找对象值的关联类型。
function getFlag<T extends keyof Flags>(flag: T) {
return myFlags[flag]
}
const result = getFlag('flag1');
您可以更进一步 return 使用 as const
的确切类型。
const myFlags = {
flag1: 'value 1',
flag2: 'value 1',
flag3: true,
flag4: 12
} as const;
function getFlag<T extends keyof typeof myFlags>(flag: T) {
return myFlags[flag]
}
const result = getFlag('flag1');