我有一个接口,用于可以将自身转换为IDBKey
的类型:
interface IDBValidKeyConvertible<TConvertedDBValidKey extends IDBValidKey> {
convertToIDBValidKey: () => TConvertedDBValidKey;
}
然后我有一个要接受IDBKey
或IDBValidKeyConvertible
类型的类:
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问题导致泛型不能为“更高种类的类型”吗?还是我做错了其他事情?
谢谢!
答案 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;
}