我对打字稿有疑问。我想从对象值创建某种东西,例如联合。我该如何实现? 例如:
const x = {
x: 1,
y: 2,
z: 'a string',
k: document.createElement('div')
}
const y = (y: the value which exist of x ): boolean => {
return true
}
类似:
type ValueOf<T> = T[keyof T];
但用于对象。 欢迎任何提示。
答案 0 :(得分:1)
我认为这是您所需要的:
export const xx = {
x: 1,
y: 2,
z: 'a string',
k: document.createElement('div')
};
type ValueOf<T> = T[keyof T];
type XValues = ValueOf<typeof xx>;
答案 1 :(得分:1)
要获取变量类型中的值的并集,可以使用ValueOf<typeof x>
。对于您的示例,该类型为string | number | HTMLDivElement
const x = {
x: 1,
y: 2,
z: 'a string',
k: document.createElement('div')
}
type ValueOf<T> = T[keyof T];
const y = (P: ValueOf<typeof x>): boolean => { // p: string | number | HTMLDivElement
return true
}
从注释中,您需要文字类型(1 | 2 | "a string"
)而不是基本类型。为此,您需要更改类型pf x
以包括文字类型。最简单的方法是在3.4中添加const
断言:
const x = {
x: 1,
y: 2,
z: 'a string',
k: document.createElement('div')
} as const
type ValueOf<T> = T[keyof T];
const y = (p: ValueOf<typeof x>): boolean => { // p: 1 | 2 | "a string" | HTMLDivElement
return true
}