使用typescript来进行类型定义和约束时,经常会出现类似报错:
元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型
;
如:定义一个请求方式与对应的className的字典映射
const methodMap = {
GET: style["get"],
POST: style["post"],
PUT: style["put"],
PATCH: style["patch"],
DELETE: style["delete"],
OPTIONS: style["options"],
HEAD: style["head"],
CONNECT: style["connect"]
在使用的时候,根据实际的请求方式,设置不同的类名;如果单纯这样使用,编译器会进行报错:
className={methodMap[method]}
这是因为传入的method字段,在编译器看来是一个字符串,而不是【GET、POST...】这几个值的一种,因此类型是不一致的。这个时候要正确使用,就需要显示声明传入的值与这些值一致:
methodMap[method as keyof typeof methodMap]
最近在前端项目中遇到在用字符串当对象的key时报错,报错信息如下:
“元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型”
在类型 XXX 上找不到具有类型为 “string” 的参数的索引签名。
搜索了一圈解决方案,没一个特别优雅的。
方案一,修改tsconfig
是修改tsconfig.json,加下面这行参数屏蔽检查,从而不报错。
"suppressImplicitAnyIndexErrors":true,
方案二,写一个函数转类型
export function
元素隐式地拥有 any 类型,因为 number类型不能被用于索引 {} 类型。Ts中string、number和any等类型 不能当做索引用,怎么处理?Ts中string、number和any等类型 不能当做索引用,怎么处理?
问题: 元素隐式具有 “any“ 类型,因为类型为 “string“ 的表达式不能用于索引类型 “Object“。 在类型 “Object“ 上找不到具有类型为 “string“ 的参数的索引签名
描述: 在写代码的时候,对一个对象做了一个for…in循环,然后取到了其每一个key对应的value值,但是写完之后发现Typescript报错了,错误内容就是如题,有点奇怪,特此去了解一下
for (const key in obejct) {
// 处理...
obejct[key]
在tsconfig.json中compilerOptions里面新增忽略的代码,如下所示,添加后则不会报错
"suppressImplicitAnyIndexErrors": true
类型断言
const values = data.map((item) => Number(item[column.property as keyof typeof item]));
const values = data.map((item) => Number(item[column.property
使用 get() set() 定义计算属性时,出现 '不能将类型“WritableComputedRef”分配给类型“string” ts(2322)' 或 "error TS2322: Type 'WritableComputedRef' is not assignable to type 'string'" 错误解决方法
Elasticsearch中每个索引定义时都有一个映射mappings,该映射确定如何对文档建立索引。一个映射mappings中主要包含两部分:
1、元字段:主要包括每个文档的_index、_type、_id和_source以及_all等。其中常用的属性有:
1>dynamic:是否可以动态索引数据。可以取值”true”、”false”或”strict”,默认为”true”。”true”表示如果存在索引中未定义的字段数据时,自动索引该字段数据,即该字段可以被作为查询条件被查询到;”false”表示如果存在索引中未定义的字段