Typescript不会从平面属性函数推断已解析的属性
我有一个函数,负责平整对象属性Typescript不会从平面属性函数推断已解析的属性,typescript,Typescript,我有一个函数,负责平整对象属性 async function query<T = {}>(query: string): Promise<T> { return Promise.resolve({ value: 'random value here', randomAttribute: 'randomValue' }) as any } type QueryResult<T> = { id: string data: T }
async function query<T = {}>(query: string): Promise<T> {
return Promise.resolve({
value: 'random value here',
randomAttribute: 'randomValue'
}) as any
}
type QueryResult<T> = {
id: string
data: T
}
async function runSomeQuery() {
const result = await query<QueryResult<{ name: string, age: string }>>('SELECT SOMETHING FROM ANOTHER THING')
const parsedResult = flatResult(result)
return parsedResult.name
}
function flatResult<T extends QueryResult<{}>>(queryResult: T) {
return {
id: queryResult.id,
...queryResult.data
}
}
异步函数查询(查询:字符串):承诺{
还愿({
值:“此处为随机值”,
随机属性:“随机值”
})一样
}
类型QueryResult={
id:字符串
数据:T
}
异步函数runSomeQuery(){
const result=wait query('从另一事物中选择某事物')
const parsedResult=flatResult(结果)
返回parsedResult.name
}
函数flatResult(查询结果:T){
返回{
id:queryResult.id,
…queryResult.data
}
}
但是flatResult()
推断的返回类型缺少name和age属性,因此当我尝试执行parsedResult.name
时,会出现错误
游乐场连结:
那么,我应该怎么做才能使这个推断正确呢?您可以简单地依赖TypeScript泛型中的类型参数干扰:即,让参数传入
flatResult()
确定返回类型:
function flatResult<T>(queryResult: QueryResult<T>) {
return {
id: queryResult.id,
...queryResult.data
}
}
实际上,您一直在通知flatResult
,result
的类型应该是任何类型,即QueryResult
.您可以简单地依赖TypeScript泛型中的类型参数干扰:即,让传递到
flatResult()的参数确定返回类型:
function flatResult<T>(queryResult: QueryResult<T>) {
return {
id: queryResult.id,
...queryResult.data
}
}
实际上,您一直在通知flatResult
,result
的类型应该是任何类型,即QueryResult
.非常感谢您的支持。我想当你定义泛型类型时,你必须在函数调用中明确定义它,比如flatResult。@BrunoQuaresma一点问题都没有!非常乐意帮忙。这实际上是我几天前在与推断类型作斗争时学到的一些新东西。非常感谢soo。我想当你定义泛型类型时,你必须在函数调用中明确定义它,比如flatResult。@BrunoQuaresma一点问题都没有!非常乐意帮忙。这实际上是我几天前在处理推断类型时学到的新东西。