【问题标题】:Need help fixing or suppressing this tslint error: TS2742需要帮助修复或抑制此 tslint 错误: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'。这很可能 不便携。需要类型注释。

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

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

【问题讨论】:

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

标签: typescript react-native styled-components tslint prettier


【解决方案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; 类型,但我认为它给出了一些其他错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多