【发布时间】:2019-10-31 22:55:11
【问题描述】:
我想编写一个泛型函数,它以泛型类型的属性名称作为参数。我需要让 TypeScript 断言该属性的值是特定类型的。考虑以下简化代码:
interface MyObject {
myProp: number;
mySecondProp: string;
myOtherProp: string;
myFlagProp: boolean;
}
const doStuff<T> = (obj: T, propName: SomeType) => { /***/ }
我可以提取特定类型的所有属性(例如string),但编译器不会确切知道该属性的类型:
type StringProps<T> = {
[K in keyof T]: T[K] extends string ? K : never }[keyof T]
}
const doStuff<T> = (obj: T, propName: StringProps<T>) => {
obj[propName].indexOf("a"); // Property 'indexOf' does not exist on type 'T[{ [K in keyof T]: T[K] extends string ? K : never; }[keyof T]]'
}
我可以做些什么来让编译器明白它应该只接受字符串属性名称并且值总是string 类型?
【问题讨论】:
标签: typescript generics