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

Kar*_*tik 5 typescript tslint react-native styled-components prettier

我在反应本机项目中有这个文件:

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')};
`);
Run Code Online (Sandbox Code Playgroud)

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

TS2742:如果不引用“react-native/node_modules/@types/react”,就无法命名“Body”的推断类型。这可能不可移植。类型注释是必要的。

我尝试了几种方法,但错误仍然存​​在:

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

Jos*_*osh 6

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

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


Jos*_*osh 1

通过“引用”,TypeScript 意味着您正在处理的特定项目在其package.json. 您可能依赖相邻的包来声明依赖关系,或者恰巧在您的计算机上全局安装了该包。

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

npm i @types/react --save-dev
yarn add @types/react -D
Run Code Online (Sandbox Code Playgroud)

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

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