有没有一种方法可以获取TypeScript中另一个通用类型扩展的通用类型?

时间:2020-05-07 00:03:45

标签: typescript typescript-generics

我有一个接口,用于可以将自身转换为IDBKey的类型:

interface IDBValidKeyConvertible<TConvertedDBValidKey extends IDBValidKey> {
    convertToIDBValidKey: () => TConvertedDBValidKey;
}

然后我有一个要接受IDBKeyIDBValidKeyConvertible类型的类:

class InMemoryIndexedKeyValueStore<TKey extends IDBValidKey | IDBValidKeyConvertible<UKey>, TValue> {
    public constructor(public readonly storeName: string) { }

    private getDbKeyFromKey(key: TKey): TKey | UKey {
        return isIDBValidKeyConvertible(key) ? key.convertToIDBValidKey() : key;
    }

   ...
}

但是,这不能像写的那样工作,因为tsc在类声明中给出了关于UKey的错误: Cannot find name 'UKey'

这是由于this TypeScript问题导致泛型不能为“更高种类的类型”吗?还是我做错了其他事情?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用这样的条件类型:

type ConvertedKey<TKey> = TKey extends IDBValidKeyConvertible<infer UKey> ? UKey : TKey;

private getDbKeyFromKey(key: TKey): ConvertedKey<TKey> {
  return this.isIDBValidKeyConvertible(key) ? key.convertToIDBValidKey() : key;
}