Typescript 元素隐式地具有一个';任何';因为类型';globalThis'的类型;没有索引签名
我正试图让下面的代码在TypeScript中编译和运行 我不知道为什么Typescript 元素隐式地具有一个';任何';因为类型';globalThis'的类型;没有索引签名,typescript,Typescript,我正试图让下面的代码在TypeScript中编译和运行 我不知道为什么funcMap会给我带来问题。如果我在纯JavaScript中尝试这一点,我会被告知this.funcMap.k1不是函数 const obj = { foo: function () { console.log("foo") }, bar: function () { console.log("bar") }, funcMap: { k1: this.foo, k2: this.bar }
funcMap
会给我带来问题。如果我在纯JavaScript中尝试这一点,我会被告知this.funcMap.k1
不是函数
const obj = {
foo: function () { console.log("foo") },
bar: function () { console.log("bar") },
funcMap: {
k1: this.foo,
k2: this.bar
},
dump: function () {
this.funcMap.k1(); // --> foo
this.funcMap["k2"](); // --> bar
}
}
obj.dump();
错误消息是:
main.ts:7:14 - error TS7017: Element implicitly an 'any' type
because type 'typeof globalThis' no index signature.
7 k1: this.foo,
~~~
main.ts:8:14 - error TS7017: Element implicitly an 'any' type
because type 'typeof globalThis' no index signature.
8 k2: this.bar
~~~
这是因为对象中的
这个
关键字不是这个对象本身,而是全局上下文,比如浏览器中的窗口
,或者node.js中的全局
此
将指向函数中的对象,但不作为对象属性
要修复代码,我将这些函数移动到单独的常量:
const foo=function(){console.log(“foo”)}
const bar=function(){console.log(“bar”)}
常量对象={
foo,//foo:foo的快捷方式
酒吧,
功能图:{
k1:foo,
k2:巴
},
转储:函数(){
this.funcMap.k1();//-->foo
这个.funcMap[“k2”]();//-->条
}
}
obj.dump();
这是因为对象中的这个
关键字不是这个对象本身,而是全局上下文,比如浏览器中的窗口
,或者node.js中的全局
此
将指向函数中的对象,但不作为对象属性
要修复代码,我将这些函数移动到单独的常量:
const foo=function(){console.log(“foo”)}
const bar=function(){console.log(“bar”)}
常量对象={
foo,//foo:foo的快捷方式
酒吧,
功能图:{
k1:foo,
k2:巴
},
转储:函数(){
this.funcMap.k1();//-->foo
这个.funcMap[“k2”]();//-->条
}
}
obj.dump();
我最终选择了以下解决方案。将funcMap更改为返回映射对象的函数
“user2541867”也提供了一个答案,但是,在这种情况下,您可能无法或不希望将函数移动到全局空间
const obj = {
foo: function () { console.log("foo") },
bar: function () { console.log("bar") },
funcMap: function () {
return {
k1: this.foo,
k2: this.bar
}
},
dump: function () {
const mapped = this.funcMap();
mapped.k1(); // --> foo
mapped["k2"](); // --> bar
}
}
obj.dump();
我最终采用了以下解决方案。将funcMap更改为返回映射对象的函数 “user2541867”也提供了一个答案,但是,在这种情况下,您可能无法或不希望将函数移动到全局空间
const obj = {
foo: function () { console.log("foo") },
bar: function () { console.log("bar") },
funcMap: function () {
return {
k1: this.foo,
k2: this.bar
}
},
dump: function () {
const mapped = this.funcMap();
mapped.k1(); // --> foo
mapped["k2"](); // --> bar
}
}
obj.dump();
好吧,现在它是有意义的,我有一种预感,这是与“这个”有关,但就是不明白为什么在对象属性上。我确实提出了另一种解决方案,我最终将funcMap转换为一个函数来返回映射对象。好了,现在它有了意义,我有一种预感,它与“this”有关,但就是无法在object属性上找到原因。我确实提出了另一种解决方案,我最终将funcMap转换为一个函数来返回映射对象。