所以,我有一个查询,要么返回完整对象,要么返回对对象内路径的引用。我有一个对象的基本类型,但是如果你传入这个路径;我不知道如何应用…ala.
例如:
type Product {
id: number,
name: string,
size: EnumSizes
color: Array<string>,
someNestedKey: {
id: number,
count: number
}
}
一些queryGetter:
const product: Product = getProductQueryCache(); // empty returns the full object
const someValue: Product['name']???? = getQueryCache('name'); // returns just the name, but wouldn't I "type" it in the query? How would I do that?
function getProductQueryCache(value: string | null) {
const product = getCache('product'); // returns everything..
if (!value) return product
return get(product, value, null); // HOW TO TYPE THIS or even should?
}
您可以将函数定义为接受Product的可选键。对于返回类型,检查值的类型。如果它在Product
的键中,结果将是该键的值,否则Product
function getProductQueryCache<K extends keyof Product>(value?: K): typeof value extends K ? Product[K] : Product {
const product = getCache('product'); // returns everything..
if (!value) return product
return get(product, value, null); // HOW TO TYPE THIS or even should?
}
const id = getProductQueryCache('id') // number
const size = getProductQueryCache('size') // EnumSizes
const prod = getProductQueryCache() // Product
const NA = getProductQueryCache('non-existing') // not assignable
游乐场