当前位置: 首页 > 知识库问答 >
问题:

javascript - keyof Map<any, any>返回的什么类型?

房育
2024-01-23

keyof Map<any, any>返回的什么类型啊?

在vue3的源码里有这么一个类型

type UnwrapRefSimple<T> = T extends Function | BaseTypes | Ref | RefUnwrapBailTypes[keyof RefUnwrapBailTypes] | {    [RawSymbol]?: true;}    ? T    : T extends Map<infer K, infer V>        ? Map<K, UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof Map<any, any>>>        : T extends WeakMap<infer K, infer V>            ? WeakMap<K, UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof WeakMap<any, any>>>            : T extends Set<infer V> ? Set<UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof Set<any>>> : T extends WeakSet<infer V> ? WeakSet<UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof WeakSet<any>>> : T extends ReadonlyArray<any> ? {    [K in keyof T]: UnwrapRefSimple<T[K]>;} : T extends object & {    [ShallowReactiveMarker]?: never;} ? {    [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>;} : T;

这里的Omit<T, keyof Map<any, any>>里的keyof Map<any, any>返回的什么类型啊? never吗?
我单独给一个变量赋值为这个类型,发现不管是什么值都不符合
let test: keyof Map<any, any>

共有1个答案

乌灿
2024-01-23

keyof Map<any, any> 返回的类型是 string | number

在 TypeScript 中,Map 类型是一个关联数组,它存储的键可以是字符串或数字。因此,keyof Map<any, any> 的结果就是 string | number

如果你给一个变量赋值为这个类型,你会发现它可以是任何字符串或数字。例如:

let test: keyof Map<any, any>;test = "hello"; // 正确test = 123; // 正确test = true; // 错误,因为 true 不是 string 或 number

在上面的代码中,变量 test 可以被赋值为字符串或数字,但是不能被赋值为其他类型(比如布尔值)。

 类似资料:
  • Any

    头文件: "boost/any.hpp" 类 any 允许对任意类型进行类型安全的存储和取回。不象无类类型,any 保存了类型信息,并且不会让你在不知道正确类型的情况下获得存入的值。当然,有办法可以让你询问关于类型的信息,也有测试保存的值的方法,但最终,调用者必须知道在 any 对象中的值的真实类型,否则不能访问any。可以把 any 看作为上锁的安全性。没有正确的钥匙,你不能进入其中。any 对

  • any

    如果Pred(Elem)为List中的至少一个元素Elem返回true,则返回true。 语法 (Syntax) any(Pred,lst) 参数 (Parameters) Pred - 将应用于字符串的谓词函数 Lst - 值列表 返回值 (Return Value) 如果Pred(Elem)为List中的至少一个元素Elem返回true,则返回true。 例如 (For example) -

  • Any

    注:内容翻译自官网参考文档中 Java Generated Code 的 Any 一节。 假设有一个类似这样的Any字段: import "google/protobuf/any.proto"; message ErrorStatus { string message = 1; google.protobuf.Any details = 2; } 在我们生成的代码中,details字段

  • Any

    注:内容翻译自官网文档 Language Guide (proto3) 中的 Any 一节 Any 消息类型可以让你使用消息作为嵌入类型而不必持有他们的.proto定义. Any把任意序列化后的消息作为bytes包含, 带有一个URL, 工作起来类似一个全局唯一的标识符. 为了使用Any类型, 需要导入google/protobuf/any.proto. import "google/protob

  • 如果集合中值的任何谓词在逻辑上为真,则返回false,否则返回true。 语法 (Syntax) 以下是语法。 (not-any? p1 col) Parameters - 'p1'是需要测试的谓词。 'col'是需要测试的值集合。 Return Value - 如果集合中值的任何谓词在逻辑上为真,则返回false,否则返回true。 例子 (Example) 以下是不是任何一个例子? 在Clo

  • 方法any遍历集合的每个元素,检查布尔谓词是否对至少一个元素有效。 语法 (Syntax) boolean any(Closure closure) boolean every(Closure closure) 参数 (Parameters) collection元素要满足的条件在闭包中指定,该闭包必须是一些布尔表达式。 返回值 (Return Value) find方法返回一个布尔值。 例子