Typescript问题太复杂了.动态对象引用



所以,我有一个查询,要么返回完整对象,要么返回对对象内路径的引用。我有一个对象的基本类型,但是如果你传入这个路径;我不知道如何应用…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

游乐场

最新更新