如同:
我正在寻找一个通用对象,该对象接收任意键的映射以查找值,并返回具有键入值的相同键(如键入的 _.mapValues)。
从对象获取单一类型属性的能力已被记录并且有效。对于数组,您需要将重载硬编码为类型化元组,但对于对象,我收到“重复字符串索引签名”错误。
export interface IPerson {
age: number;
name: string;
}
const person: IPerson = {
age: 1,
name: ""
}
function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
return o[name];
}
const a = getProperty(person, 'age');
// a: number
const n = getProperty(person, 'name');
// n: string
function getProperties<T, K extends keyof T>(obj: T, keys: { [key: string]: K }) {
const def: { [key: string]: T[K] } = {};
return Object.entries(keys).reduce((result, [key, …Run Code Online (Sandbox Code Playgroud) 我的问题类似于来自 Typescript 中对象的键和值的类型,但有一个额外的嵌套层:
interface Outer {
a: {
b: number
},
c: {
d: string
}
}
Run Code Online (Sandbox Code Playgroud)
我只想在此处检索所有值的联合类型number | string。
这是我的刺:
type Values<T extends Record<string, any>> = T[keyof T]; // From previous SO answer
type InnerValues<
T extends Record<string, Record<string, any>>,
K extends keyof T
> = T[K][keyof T[K]];
type All = Values<Outer>;
type In = InnerValues<Outer, keyof Outer>; // expected number|string
Run Code Online (Sandbox Code Playgroud)
但我有一个错误说Outer没有索引类型。
像这样的物体
const USER_EVENT = {
pageview: 'Visit',
order: 'Order'
}
Run Code Online (Sandbox Code Playgroud)
如果我想得到一个所有键并集的类型
type UserEventKey = 'pageview' | 'order'
Run Code Online (Sandbox Code Playgroud)
我可以做到这一点
type UserEventKey = keyof typeof USER_EVENT
Run Code Online (Sandbox Code Playgroud)
...但是是否可以通过所有值的并集来获得这种类型?
type UserEventName = 'Visit' | 'Order'
type UserEventName = ???? is it possibile?
Run Code Online (Sandbox Code Playgroud)