我正在编写一个与回调函数相关的函数。但是我似乎无法访问其属性。
const example = (
callback: (...args: unknown[]) => unknown
): void => ({
name: callback.name // <- errors
// ...
})
我的问题是,typescript不喜欢我访问功能属性。
name: callback.name
// ts(2339): Property 'name' does not exist on type '(...args: any[]) => any'
访问函数名称(或与此相关的其他Function
属性)的正确方法是什么?
打字稿版本:“
ˆ3.9.7
” (截至发布日期)
答案 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],
});
}
}
);