为什么我无法访问函数属性?

时间:2020-08-02 10:10:47

标签: javascript reactjs typescript

我正在编写一个与回调函数相关的函数。但是我似乎无法访问其属性。

const example = (
   callback: (...args: unknown[]) => unknown
): void => ({
   name: callback.name // <- errors
   // ...
})

我的问题是,不喜欢我访问功能属性。

name: callback.name 
// ts(2339): Property 'name' does not exist on type '(...args: any[]) => any'

访问函数名称(或与此相关的其他Function属性)的正确方法是什么?

打字稿版本:“ ˆ3.9.7(截至发布日期)

2 个答案:

答案 0 :(得分:1)

好吧,我找到了造成它的原因以及如何解决它。 发生此问题的原因是我的tsconfig.json是如何在项目中设置的。

// tsconfig.json
{
  "compilerOptions": {
    "target": "es5",
    // ....
  },
}

原因interface Functon仅在lib.es6.d.ts中声明

因此,根据需要,为了解决此问题,您可以

  • 升级tsconfig.json中的目标版本

    {
      "compilerOptions": {
         "target": "es6" // was "es5"
         // ...
      }
    }
    
  • 或指定要包含在编译中的"lib"

    {
      "compilerOptions": {
          "target": "es5",
          "lib": ["es6", "dom", "es2016", "es2017", "es5"], // needs at least es6
         // ...
      }
    }
    

答案 1 :(得分:-1)

import { Dispatch, SetStateAction } from 'react'
import { FieldType, ErrorType } from 'types/FieldTypes'

const handleErrors = (
  setField: Dispatch<SetStateAction<FieldType>>,
  callback: {
    name: 'name of callback',
    run: (args) => {
      try {
        callback.run();
      } catch (e) {
      const newError: ErrorType = {
        name: callback.name,
        message: e.message,
      };
      setField((prevData) => ({
        ...prevData,
        errors: [...prevData.errors || [], newError],
      });
    }
  }
);