可以看到索引类型为string时,keyof 返回的类型是string | number, 这是因为JavaScript的对象属性会默认转换为字符串。 in的使用 in的右侧一般会跟一个联合类型,使用in操作符可以对该联合类型进行迭代。 其作用类似JS中的for...in或者for...of awk type Animals ='pig'|'cat'|'dog'type animals = {[keyinAni...
functiongetValue<TextendsObject, Kextendskeyof T>(o: T,key: K): T[K] {returno[key]; }constobj1 = {name:'张三',age:18};consta =getValue(obj1,'hh'); 复制代码 in in用于取联合类型的值。主要用于数组和对象的构造。 typename ='firstName'|'lastName';typeTName = { [key in name]:...
无法对 key 进行约束,可能会犯拼写的错误 这时我们可以使用 keyof 来增强 getValue 函数的类型功能。 使用keyof 后我们可以看到,可以完整的提示可以输入的值,当拼写错误时也会有清晰的提示。 function getValue<T extends Object, K extends keyof T>(o: T, key: K): T[K] { return o[key]; } const o...
在不使用 keyof 运算符时,我们也可以手动定义联合类型: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 type keyProp='name'|'empCode';functiongetProperty<T,KextendskeyProp>(obj:T,key:K):T[K]{returnobj[key];} 尽管这种手动方式应用了相同类型的约束,但这种方法的可维护性较差。类型定义会重复,如...
type StringKeys<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T]; function getStringValue<T>(obj: T, key: StringKeys<T>): string { return obj[key] as string; } // 测试数据 const person: Person = { name: 'Alice', age: 25, city: 'Shanghai' }; /...
type stringMapDemo = {[key: string]: unknown}; function sampleStringPair(property: keyof stringMapDemo, value: string): stringMapDemo { return {[property]: value}; } 我们定义了一个类型 stringMapDemo,它表示一个对象,其中所有键都是字符串类型,所有值的类型为 unknown。
[K in keyof T]: T[K]; }; type Bar = Foo<{ a: string, b: number }>; type KeyType = Bar['a']; // 获取键'a'的类型,这里为string 在上面的例子中,我们定义了一个泛型类型Foo<T>,使用索引类型keyof T遍历T的所有键,并将其映射为对应的值的类型T[K]。然后,我们可以通过Bar['a']来获...
type TCacheExpiretTime = { [key in keyof BrowserCache]?: Date; } TCacheExpireTime最终类型推断将会是 type TCacheExpiretTime = { TOKEN_CACHE?: Date | undefined; ID_CACHE?: Date | undefined; } 《待续》今后碰到相关用法在这里记录下,充当笔记。 参考...
无法对 key做约束:可能会犯拼写错误的问题 这时可以使用 keyof 来加强 get 函数的类型功能 function get<T extends object, K extends keyof T>(o: T, name: K): T[K] { return o[name]
keyofcan also be used with index signatures to extract the index type. type StringMap = { [key: string]: unknown }; // `keyof StringMap` resolves to `string` here functioncreateStringPair(property: keyof StringMap, value: string): StringMap { ...