首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我的键是某种接口类型时,Typescript map.get方法返回undefined

当键是某种接口类型时,TypeScript 的 map.get 方法返回 undefined 是因为在 TypeScript 中,对象的键必须是字符串类型或者符号类型。如果键的类型是接口类型,那么在使用 map.get 方法时,由于接口类型无法直接转换为字符串类型或符号类型,因此无法正确获取对应的值。

为了解决这个问题,可以考虑以下几种方法:

  1. 使用字符串或符号类型作为键:将接口类型转换为字符串或符号类型,然后作为键来使用。例如,可以使用接口的某个属性作为键,或者使用符号类型作为键。
  2. 使用自定义映射函数:定义一个自定义的映射函数,将接口类型映射为字符串或符号类型,然后使用映射后的值作为键进行操作。
  3. 使用其他数据结构:如果需要使用接口类型作为键,可以考虑使用其他数据结构来替代 Map。例如,可以使用 SetWeakMapWeakSet 等数据结构来存储键值对。

需要注意的是,以上方法仅适用于 TypeScript 中的情况。在 JavaScript 中,Map 对象的键可以是任意类型,包括接口类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript真香系列——接口篇

(): void; findAll(): void; } 如果我们有一个对象是该接口类型,那么必须包含对应属性和方法(无可选属性情况): const q: IQuery = { page: 1...可选属性 默认情况下一个变量(对象)对应接口类型,那么这个变量(对象)必须实现接口中所有的属性和方法。...(): void } 上面的代码中,我们增加了isOnline属性和delete方法,这两个都是可选: 注意:可选属性如果没有赋值,那么获取到undefined;对于可选方法,必须先进行判断,再调用...: string) => void; 接口实现 接口除了定义某种类型规范,也可以和其他编程语言一样,让一个类去实现某个接口,那么这个类就必须明确去拥有这个接口中属性和实现其方法: 下面的代码中会有关于修饰符警告...在代码设计中,接口一种规范;接口通常用于来定义某种规范, 类似于你必须遵守协议, 站在程序角度上说接口只规定了类里必须提供属性和方法,从而分离了规范和实现,增强了系统可拓展性和可维护性; 接口继承

97810
  • TypeScript真香系列——接口篇

    (): void; findAll(): void; } 如果我们有一个对象是该接口类型,那么必须包含对应属性和方法(无可选属性情况): const q: IQuery = { page:...可选属性 默认情况下一个变量(对象)对应接口类型,那么这个变量(对象)必须实现接口中所有的属性和方法。...(): void } 上面的代码中,我们增加了isOnline属性和delete方法,这两个都是可选: 注意:可选属性如果没有赋值,那么获取到undefined;对于可选方法,必须先进行判断,...: string) => void; 接口实现 接口除了定义某种类型规范,也可以和其他编程语言一样,让一个类去实现某个接口,那么这个类就必须明确去拥有这个接口中属性和实现其方法: 下面的代码中会有关于修饰符警告...在代码设计中,接口一种规范;接口通常用于来定义某种规范, 类似于你必须遵守协议, 站在程序角度上说接口只规定了类里必须提供属性和方法,从而分离了规范和实现,增强了系统可拓展性和可维护性; 接口继承

    70130

    一文读懂 TS 中 Object, object, {} 类型之间区别

    必须对象,不能原始值。...我们可以看到,如果我们创建一个返回其参数函数: 传入一个 Object 对象实例,它总是会满足该函数返回类型 —— 即要求返回值包含一个 toString() 方法。...类型检查: const pt = {} as Point; pt.x = 3; pt.y = 4; // OK 但是更好方法声明变量类型并一次性构建对象: const pt: Point =...尾随分隔符允许,也是可选。好,那么现在问题来了,对象字面量类型和接口类型之间有什么区别呢?...4.3 {} 类型 {} 类型:它描述了一个没有成员对象。当你试图访问这样一个对象任意属性TypeScript 会产生一个编译错误。

    16.9K21

    ES6 Map介绍

    工作原理Map一种有序键值对集合,其中每个都是唯一。它可以存储任何类型值作为或值,包括原始类型和对象引用。与普通对象不同,Map保留了插入顺序,并且可以迭代访问其元素。...Map工作原理基于哈希表(Hash Table)数据结构。当我们将键值对添加到Map中,它会根据哈希值将其存储在内部哈希表中。...这使得在Map中查找键值对速度非常快,无论存储了多少个键值对。常见方法以下ES6 Map常见方法:set(key, value):向Map中添加一个键值对,如果已经存在,则更新对应值。...get(key):根据获取对应值,如果不存在,则返回undefined。has(key):检查Map中是否存在指定返回一个布尔值。...delete(key):根据删除对应键值对,如果删除成功,则返回true;如果不存在,则返回false。clear():清空Map,移除所有的键值对。size:获取Map中键值对数量。

    37930

    ES6学习之路9----Map数据结构

    Stone" 读取一个未知,则返回undefined。...(true,'bool'); map.get('true');//undefined Map实例操作属性和方法 size 属性返回 Map 结构成员总数。...set 方法设置键名key对应键值为value,然后返回整个 Map 结构。 get 方法读取key对应键值,如果找不到key,返回undefined。...has 方法查找某个是否在当前 Map 对象之中,返回一个布尔值。 delete 方法删除某个返回一个布尔值 。 clear 方法清除所有成员,没有返回值。...—-同名键值赋值会覆盖前边值 读取一个未知,则返回undefined。—-获取map中不存在键值,返回undefined 只有对同一个对象引用,Map 结构才将其视为同一个

    40320

    1.8W字|了不起 TypeScript 入门教程(第二版)

    当一个函数没有返回,你通常会见到其返回值类型 void: // 声明函数返回值为void function warnUser(): void { console.log("This is my...例如,never 类型那些总是会抛出异常或根本就不会有返回函数表达式或箭头函数表达式返回值类型。...设计泛型关键目的在成员之间提供有意义约束,这些成员可以是:类实例成员、类方法、函数参数和函数返回值。 泛型(Generics)允许同一个函数接受不同类型参数一种模板。...TypeScript 2.1 版本引入,该操作符可以用于获取某种类型所有,其返回类型联合类型。...void { console.log(`Person info: name: ${args[0]}, age: ${args[1]}`); } 之后,当我们使用 addPerson 方法TypeScript

    10.2K51

    猿创征文 |ES6学习笔记5-map

    对象与贴图类似,但在某些情况下,有一些重要差异使得使用贴图更可取:  一个Object 类似于Map ,但在某些情况下使用Map 也有很多不同: 1)可以是任何类型,包括函数、对象和任何基元。 ...如果指定已存在,则将用指定值替换对应值。 get(key)获取对应于映射中指定值。如果指定不存在,则返回undefined。...map .set(1, 'aaa') .set(1, 'bbb'); // 结果 bbb值 如果读取一个​未知​,则返回undefined​。...const map = new Map(); map.set(['a'], 555); map.get(['a']) // undefined 上面代码​set​和​get​方法,表面针对同一个,...但实际上这是两个不同数组实例,内存地址不一样,因此​get​方法无法读取该返回undefined​。

    86740

    深入理解 ES6 新增数据结构 Map 与 WeakMap

    map.size // 2 map.get('name') // "张三" map.get('age') // 22 上面代码在新建 Map 实例,就指定了两个 name 和 title 3、可覆盖前一个值...222 上面代码中,变量 k1 和 k2 一样,但是它们在 Map 结构中被视为两个 由上可知,Map 实际上跟内存地址绑定,只要内存地址不一样,就视为两个 如果Map一个简单类型值...(1) {"name" => "Winnie"} m2 // Map(1) {"name" => "Winnie"} set 方法返回 Map 本身,因此可以采用链式写法...undefined map.get('name') // "Winnie" map.get('age') // undefined ③ has(key) has 方法返回一个布尔值,表示某个是否在...上面代码中,变量 wm 一个 WeakMap 实例 我们将一个 DOM 节点 div1 作为键名,然后销毁这个节点,div1 对应就自动消失了,再引用这个键名就返回 undefined 2、WeakMap

    63020

    你了解 Typescript

    什么Typescript TypeScriptJavaScript超集,带来了诸多新特性: 可选静态类型 类型接口 在ES6和ES7被主流浏览器支持之前使用它们新特性 编译为可被所有浏览器支持...支持使用ES6和ES7新特性 在TypeScript中,你可以直接使用ES6最新特性,在编译它会自动编译到ES3或ES5。...function warnUser(): void { alert("This is my warning message"); } // 默认情况下null和undefined所有类型子类型...// 可以把null和undefined赋值给各种类型变量 let u: undefined = undefined; let n: null = null; 接口 TypeScript核心原则之一对值所具有的结构进行类型检查...结束语 很多时候,当我们维护不同重量级应用,或是在不同场景中使用应用时候,面对架构选择往往不一样

    5.6K10

    编写高质量可维护代码:Awesome TypeScript

    TypeScript JavaScript 一个超集,它设计初衷并不是为了替代 JavaScript,而是基于 JavaScript 做了一系列增强,包括增加了静态类型、接口、类、泛型、方法重载等等...TypeScript TypeScript 静态类型语言,通过类型注解提供编译静态类型检查。 在代码编译阶段会进行变量类型检测,提前暴露潜在类型错误问题。...#name; // 访问会报错 泛型 应用场景:当我们需要考虑代码可复用性,就需要用到泛型。让组件不仅能够支持当前数据类型,同时也能支持未来数据类型。...(param: string | number): void { console.log("This is the union type"); } 类型保护 类型保护就是在我们已经识别到当前数据某种数据类型情况下...": true, // 有未使用参数,抛出错误 "noImplicitReturns": true, // 并不是所有函数里代码都有返回,抛出错误

    2.4K10
    领券