类型不能分配给类型T

时间:2019-05-01 00:17:48

标签: typescript

export function getBlank<T extends { results: any[] }>(): Observable<T> {
  const response: T = { results: [] };
  return of(response);
}

编译失败

Type '{ results: undefined[]; }' is not assignable to type 'T'.ts(2322)

请帮助,这是怎么了?

1 个答案:

答案 0 :(得分:4)

export function getBlank<T extends { results: any[] }>(): Observable<T> {
  const response: T = { results: [] };
  return of(response);
}

此函数中的代码必须通过任何用户提供的扩展了T的类型{ results: any[] }的类型检查,例如以下代码:

const o = getBlank<{result: any[]; moreResults: any[]}>();

但是对于此T,此分配无效,因为缺少moreResults

const response: T = { results: [] };

通常,除非在通用函数的主体中创建的任何变量都不能使用通用参数T,除非您使用构造函数或通常作为参数提供的其他函数,声明为返回对任何可能的T进行适当初始化的值。