我想基于通用值返回其他类型。例如:
interface Base {
key: string[];
}
class Test<T> {
value = [];
getSomething(): (T extends Base ? string[] : string) {
if (Array.isArray(this.value)) {
return ['a'] as string[];
}
return 'nothing' as string;
}
}
const v = new Test<Base>().getSomething();
但是我遇到一个错误:
类型string []不可分配给类型T扩展Base?字符串[]: 字符串
答案 0 :(得分:1)
其中仍然有未解析的条件类型(例如函数内的T
)通常不能从其他类型(没有类型断言)中分配类型参数。 Typescript将无法按照您函数中的逻辑来确定分配是安全的。
最安全的选择是使用单独的实现和公共签名:
interface Base {
key: string[];
}
class Test<T> {
value = [];
getSomething(): (T extends Base ? string[] : string)
getSomething(): string[] | string {
if (Array.isArray(this.value)) {
return ['a'] as string[];
}
return 'nothing' as string;
}
}
const v = new Test<Base>().getSomething();
或者是类型断言(尽管如果您先对类型进行别名,效果会更好)
答案 1 :(得分:-1)
您将无法确定这样的返回类型。
替代方法是始终返回string [],并且当类不是从Base继承时返回数组中的单个值。