Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 元素隐式地具有一个';任何';因为类型';globalThis'的类型;没有索引签名_Typescript - Fatal编程技术网

Typescript 元素隐式地具有一个';任何';因为类型';globalThis'的类型;没有索引签名

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 }

我正试图让下面的代码在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
  },

  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转换为一个函数来返回映射对象。