需要帮助修复或抑制此 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_modules
和 package-lock.json
或任何用于您的包管理器的锁定文件并重新安装所有依赖项
【参考方案1】:
或者,检查您的 package-lock.json
和 yarn.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<DefaultTheme>
类型,但我认为它给出了一些其他错误。
【讨论】:
以上是关于需要帮助修复或抑制此 tslint 错误:TS2742的主要内容,如果未能解决你的问题,请参考以下文章
VSCode - TSLint 错误 ENOTDIR 无效 cwd