第0行: 解析错误: 无法读取未定义的属性“ map”

当前在我的客户端启动服务器时,上面的错误就是我所犯的错误 我正在使用 TypeScript,ReactJS,ESLint。由于这个错误,我似乎不能前进 ESLint 的 GitHub 页面也帮不上什么忙。

在我创建了 useMutation 组件并将其导出到 index.ts之后,出现了这个错误。 Not sure how to get rid of this error.

Below is my package.json
    {
"name": "tinyhouse_client",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"@types/jest": "^24.0.0",
"@types/node": "^12.0.0",
"@types/react": "^16.9.35",
"@types/react-dom": "^16.9.0",
"@typescript-eslint/parser": "^3.0.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-scripts": "3.4.1",
"typescript": "~2.23.0"
},
"resolutions": {
"@typescript-eslint/eslint-plugin": "^2.23.0",
"@typescript-eslint/parser": "^2.23.0",
"@typescript-eslint/typescript-estree": "^2.23.0"
},
"scripts": {
"start": "react-scripts start",
" build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
**strong text** "proxy": "http://localhost:9000"
}
Below is my index.ts
    export * from './server';
export * from './useQuery';
export * from './useMutation';
And my useMutation.ts
    import { useState } from 'react';
import { server } from './server';


interface State<TData> {
data: TData | null;
loading: boolean;
error: boolean;
}


type MutationTuple<TData, TVariables> = [
(variables?: TVariables | undefined) => Promise<void>,
State<TData>
];


export const useMutation = <TData = any, TVariables = any>(
query: string
): MutationTuple<TData, TVariables> => {
const [state, setState] = useState<State<TData>>({
data: null,
loading: false,
error: false,
})


const fetch = async (variables?: TVariables) => {
try {
setState({ data: null, loading: true, error: false });


const { data, errors } = await server.fetch<TData, TVariables>({ query, variables });
if (errors && errors.length) {
throw new Error(errors[0].message);
}


setState({ data, loading: false, error: false });
} catch (err) {
setState({ data: null, loading: false, error: true });
throw console.error(err);
}
}


return [fetch, state];
};
78773 次浏览

这是来自于 eslint-typecript 吗? 如果是,请检查您的类型脚本版本不是 dev/night 构建。

对于未来的谷歌员工:

我刚才在 Vue.js2项目的 TypeScript4.0.2中遇到了同样的问题。我通过将 @typescript-eslint/eslint-plugin@typescript-eslint/parser升级到 npm 使用 @latest提供的最新版本来解决这个问题,当时 @latest分别为3.3.0和3.10.1。

尝试在接口内使用变量类型。 例如,当我有这样的状态接口时,我得到了这个错误:

interface State{
foo: []
}

但是当我改变数组的类型时,它起作用了:

interface State{
foo: string[]
}

这就是我的 CRA 项目的成果。

步骤1: 编辑 package.json并将 typescript版本设置为 ^3.9.7

步骤2: 删除 node_modules中的 .cache文件夹

步骤3: 运行 npm install

编辑: 正如黄所指出的,这个问题不再出现在 react-scripts@^4.0.1

发生此错误是因为 react-scripts直接依赖于 @typescript-eslint/parser@typescript-eslint/eslint-plugin的2.xx 范围。

您可以通过在 package.json中添加一个分辨率字段来解决这个问题,如下所示:

"resolutions": {
"**/@typescript-eslint/eslint-plugin": "^4.1.1",
"**/@typescript-eslint/parser": "^4.1.1"
}

NPM 用户: 将上面的分辨率字段添加到 package.json,但使用 Npx npm-力量-分辨率更新 package-lock.json中的软件包版本。

纱线用户: 你不需要做其他任何事情,更多信息请参见 选择性依赖解决方案

注意: 如果使用 monorepo/Yarn 工作区,则 resolutions字段必须位于顶级 package.json中。

注意: yarn addyarn upgrade-interactive不尊重 resolutions字段,它们可以生成一个 yarn.lock文件,结果产生不正确的版本。小心。

我有同样的错误,但是对我来说修复的是,我有一个类型为

text : string[] | []

然后改成

text : string[]

对我有用

有时,这个错误是其他类型声明的无效类型的结果

我在使用裸数组作为类型时得到了这个错误

const someVariable: [] //Incorrect
const someVariable: string[] //Correct

当我错误地输入一个多维数组时,我也得到了这个错误:

const someVariable : [string[]] //Incorrect. Results in map error


const someVariable : string[][] //Correct

来自类型脚本的错误消息非常神秘,所以希望这有所帮助。

您的 TypeScript 版本与 eslint 不兼容。您可以通过将这两个依赖项升级到最新版本来修复它。

TypeScript 4.0.5 与版本4.6.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.6.0",
"@typescript-eslint/parser": "^4.6.0",
}

TypeScript 4.1.5 与版本4.18.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.18.0",
"@typescript-eslint/parser": "^4.18.0",
}

TypeScript 4.2.4 与版本4.23.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.23.0",
"@typescript-eslint/parser": "^4.23.0",
}

TypeScript 4.3.2 与版本4.25.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.25.0",
"@typescript-eslint/parser": "^4.25.0",
}

TypeScript 4.5.5 与版本5.10.2兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.10.2",
}

TypeScript 4.6.2 与版本5.15.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.15.0",
"@typescript-eslint/parser": "^5.15.0",
}

TypeScript 4.7.2 与版本5.26.0兼容

"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
}

纱线用户,我有同样的问题在反应,我解决了这个问题,解决了包锁。Json 文件并重新安装:

rm -rf node_modules
yarn cache clean
yarn install

我用 linux 终端关闭的 vscode 做的,为了不出现缓存问题。

因为 npm-force-resolutions解决方案不适合我,所以不得不手动添加依赖项,即使它给出了不兼容的警告。

  1. 首先,我必须向 package.json添加以下依赖项(dependencies,因为我正在使用 create-response-app,我从未见过它使用 devDependencies) :
"dependencies": {
"@typescript-eslint/eslint-plugin": "^4.1.1",
"@typescript-eslint/parser": "^4.1.1",
}
  1. 然后,我做 rm -rf node_modules/,所以我可以有一个干净的安装 npm 的东西。

  2. 接下来,安装所有程序: npm install

  3. 检查您的版本是否正确: npm ls @typescript-eslint/eslint-plugin。它说 UNMET PEER DEPENDENCY,但我不得不忽略它,因为否则我不能得到这个工作。

  4. npm start以确保 create-response-app 现在可以工作。

我建议首先使用 npm-force-Resolment 解决方案,但是如果失败了,可以试试这个。

还有一点:

整个灾难就是因为我做了这样的事:

interface SomeInterface {
someBoolean: boolean,
someList: number[],
someTuple: [string, string]  // <-- THIS is the problem
}

如果我删除了注释行,代码就可以顺利编译了。我保持这样是因为我已经让我的代码像这样工作了,但是如果你只是避免在接口中有一个元组(不管它是否有 标签) ,你可以潜在地避免所有这些麻烦。

除了上面描述的 array types问题外,还有很多 tuple案例引起了这个问题

interface Some {
// error
tupleValue: [string, number]


// works
tupleValue: [v1: string, v2: number]


// error
tupleArr: [v1: string, v2: number][]


// works!
tupleArr2: Array<[v1: string, v2: number]>
}

另一个例子:

type ValueView = [value: SomeObj, view: string]


// error
const res1: ValueView[] = arr.map(v => [v, v.name])
// works !!!
const res: ValueView[] = arr.map(v => [v, v.name] as ValueView)


// error
const res = arr.map(v => [v, v.name] as [SomeObj, string])
// works !!!
const res = arr.map(v => [v, v.name] as [value: SomeObj, view: string])

因此,请两次检查您的元组操作

对于所有使用 create-response-app 和类型脚本的人来说。

当你遇到这样的错误时

升级打字稿

还有

升级反应脚本软件包

您可以在 package.json 中修复这个问题,如下所示:

"@typescript-eslint/eslint-plugin": "^4.18.0",
"@typescript-eslint/parser": "^4.18.0",

我的打字稿版本是: “ typeescript”: “ ^ 4.1.5”

如果您有动态类型化的函数参数,以及类型化脚本 v4和更高版本,可能会发生这种错误

{
...
getDataThunk: (...args: [string]) => dispatch(getData(...args))
...
}

直到我使用 TS version < = 4.0.0时才抛出此错误。另外,使用扩展参数对我来说是一个很大的过度设计,用逗号分隔的函数参数替换它解决了上述问题。

在我的例子中,我必须向 package.json 中的“分辨率”添加两个依赖项。

"resolutions": {
"@typescript-eslint/parser": "^3.0.0",
"@typescript-eslint/eslint-plugin": "^3.0.0"
}

我使用的是 Tyescript 4.1.0

我发现了这个问题,我解决了它与改变值类型的文件

在我的情况下,我被宣布为

let data: [] = [];

我的所有文件是错误显示解析错误: 不能读取属性’映射’的未定义时,我更改为

let data: any = [];

这是工作,错误得到了解决。

我所面临的问题是,我试图导出一个具有接口属性的类型。

在一个接一个地查看之后,我发现我正在一个类型中使用一个接口。所以我不得不把它改回一个接口,这个问题就解决了