Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript不会从平面属性函数推断已解析的属性_Typescript - Fatal编程技术网

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一点问题都没有!非常乐意帮忙。这实际上是我几天前在处理推断类型时学到的新东西。