Typescript 类型脚本:对象的键类型?
我想定义以下类型:Typescript 类型脚本:对象的键类型?,typescript,Typescript,我想定义以下类型: type Item = { name: string, value: number | string } type ItemFilter<T extends Item> = { property: keyof Item; value: // ?????? I'd like to have here the type of Item[property] } 这里我要做的是值构造函数,它将为我们的对象生成适当的过滤器值。考虑代码:
type Item = {
name: string,
value: number | string
}
type ItemFilter<T extends Item> = {
property: keyof Item;
value: // ?????? I'd like to have here the type of Item[property]
}
这里我要做的是值构造函数,它将为我们的对象生成适当的过滤器值。考虑代码:
const makeFilter = <T extends Record<string, any>> (item: T) => <K extends keyof T>(property: K, value: T[K]) => {
return {
property,
value
}
}
// TESTS
const myItem = {
name: 'phoneNumber',
value: 1111111,
}
const filter = makeFilter(myItem) // create function for specific object filtering
filter('value', 1231) // ok
filter('value', 'a') // error as expected
filter('name', 1231) // erorr as expected
filter('name', 'fine') // ok
constmakefilter=(项:T)=>(属性:K,值:T[K])=>{
返回{
财产,,
价值
}
}
//测验
常量myItem={
姓名:'电话号码',
价值:1111111,
}
const filter=makeFilter(myItem)//为特定对象筛选创建函数
过滤器('value',1231)//确定
筛选器('value','a')//按预期出现错误
筛选器('name',1231)//erorr如预期
过滤器('name','fine')//确定
请注意,我们甚至不再需要任何项
类型,解决方案将适用于每个对象
一些解释:
是一个通过参数派生类型的函数makeFilter
- 它首先得到我们的初始对象和返回函数,该函数只有这个特定对象类型的参数
为特定对象创建所需的过滤器构造函数filter=makeFilter(obj)
- 在参数中使用
after已经正确地缩小了类型filter
表示值需要是键下对象的值-property:K,value:T[K]
K
不完全是这样,但这能解决您的问题吗?
const makeFilter = <T extends Record<string, any>> (item: T) => <K extends keyof T>(property: K, value: T[K]) => {
return {
property,
value
}
}
// TESTS
const myItem = {
name: 'phoneNumber',
value: 1111111,
}
const filter = makeFilter(myItem) // create function for specific object filtering
filter('value', 1231) // ok
filter('value', 'a') // error as expected
filter('name', 1231) // erorr as expected
filter('name', 'fine') // ok