需要帮助修复或抑制此 tslint 错误:TS2742

Posted

技术标签:

【中文标题】需要帮助修复或抑制此 tslint 错误:TS2742【英文标题】:Need help fixing or suppressing this tslint error: TS2742 【发布时间】:2020-12-27 13:31:05 【问题描述】:

我在 react native 项目中有这个文件:

import styled,  withTheme  from 'styled-components';
import  BaseText  from '../BaseText';

export interface BodyProps 
  textAlign?: string;
  fontSize?: string;


export const Body = withTheme(styled(BaseText)<BodyProps>`
  text-align: $props => (props.textAlign ? props.textAlign : 'center');
  font-size: $props => (props.fontSize ? props.fontSize : '16px');
`);

我将 react native 从 0.61.5 升级到 0.63.2 并开始在使用 withTheme 的任何地方出现此 lint 错误:

TS2742:“身体”的推断类型不能在没有名称的情况下命名 参考'react-native/node_modules/@types/react'。这很可能 不便携。需要类型注释。

我尝试了几件事,但错误仍然存​​在:

    在this post 之后,我添加了import React from "react"; 尝试通过在 Body 声明上方添加 /* tslint:disable */ 来禁用 tslint 尝试通过在 Body 声明上方添加 // tslint:disable-next-line 来禁用 tslint 使用依赖版本。目前我有"@types/react": "^16.9.49"

【问题讨论】:

你有重复的类型,这就是它的意思。查看路径,它是一个嵌套在node_modules/react-native/ 中的node_modules 目录你有冲突的依赖项 @AluanHaddad 谢谢,但@types 里面没有node_modules/react-native/ 目录 这很奇怪。删除 node_modulespackage-lock.json 或任何用于您的包管理器的锁定文件并重新安装所有依赖项 【参考方案1】:

或者,检查您的 package-lock.jsonyarn.lock -- 那里是否列出了多个 @types/react 版本?尝试将 package.json 更改为与 react-native 列为依赖项的 @types/react 版本相同。

可能是您有多个版本的 @types/react React 类型,并且组件对从哪个版本导入感到困惑。

【讨论】:

【参考方案2】:

通过“引用”,TypeScript 表示您正在处理的特定项目在其package.json 中没有(常规/开发/对等/可选)依赖项。您可能依赖相邻的包来声明依赖关系,或者偶然在您的计算机上全局安装。

要解决此问题,请将@types/react 作为devDependency 添加到您的package.json 并使用您选择的包管理器进行安装。这将满足 TypeScript,因为它会保证你的包肯定有一个对它需要的(React)类型的引用——不仅仅是巧合。

npm i @types/react --save-dev
yarn add @types/react -D

我们还应该注意,“tslint”和tslint:disable 指的是TSLint,这是一个现已弃用的工具,与TypeScript相同。 TSLint 是一个单独的库,它向 TypeScript 代码添加了额外的静态分析(“linting”)。换句话说,TSLint 之于 TypeScript 就像 ESLint 之于 javascript

您看到的错误是 TypeScript 错误,而不是 TSLint 错误。

【讨论】:

感谢您的回答。我已经有了问题最后一行中提到的 devDependency。感谢您解释为什么 tslist:disable 不起作用。 您确定它已安装 (npm i / yarn)? :) 注意文件路径,react-native/node_modules/@types/react——出于某种原因,TypeScript 认为您的 @types/react 来自子模块,而不是您直接列出的依赖项。【参考方案3】:

我通过给它any 类型修复它(不确定它是否是真正的修复):

export const Body: any = withTheme(

我也可以使用 WithThemeFnInterface&lt;DefaultTheme&gt; 类型,但我认为它给出了一些其他错误。

【讨论】:

以上是关于需要帮助修复或抑制此 tslint 错误:TS2742的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WebStorm 中保存 TSLint?

VSCode - TSLint 错误 ENOTDIR 无效 cwd

tslint 错误阴影名称:'Observable'

如何使用 tslint 获取所有 ts 文件代码行数?

TS2351:不能将“new”与类型缺少调用或构造签名的表达式一起使用。角度 8

eslint --fix 只抑制错误,不修复