TypeScript 属性“道具”不存在

Posted

技术标签:

【中文标题】TypeScript 属性“道具”不存在【英文标题】:TypeScript Property 'props' does not exist 【发布时间】:2017-11-28 14:51:06 【问题描述】:

我有这个.tsx 文件:

import React,  Component  from 'react';

export class SidebarItem extends Component 
  constructor(props) 
    super(props);
  
  
  render() 
    return (<li>this.props.children</li>);
  

但是,TypeScript 会抛出这个错误:

error TS2339: Property 'props' does not exist on type 'SidebarItem'.

【问题讨论】:

因为this.props.children 应该由 React 自动设置。这是您访问传递给组件的内容的方式。 path 另外constructor (props) super(props); this.props = props; 会抛出SidebarItem上不存在'props'的错误 您找到答案了吗?我在 tsc v2.3.4 上有同样的问题。你有用 TypeScript 编写 React 类组件的好链接吗?' 不。我放弃了尝试将 TypeScript 与 React 一起使用。 【参考方案1】:

解决方案是安装 React Types 定义

yarn add -DE @types/react

更多详情来自typescript docs 和types repo

顺便说一句,我必须重新启动 vscode 才能正确启动 linting。

【讨论】:

通过添加yarn add @types/react 确认为我工作。【参考方案2】:

TypeScript 遵循 ES 模块规范,而 React 遵循 CommonJS。 This article touches on that among other things.

像这样导入 React 将解决这个问题:

import * as React from 'react';

export class SidebarItem extends React.Component 
    constructor (props) 
        super(props);
    

    render () 
        return (<li>this.props.children</li>);
    

【讨论】:

谢谢雅普。干得好。从 typescript 2.3 升级到 3.2,这解决了 VS 编译器问题。【参考方案3】:

您可以尝试以下方式编写 React Comp。

interface SidebarItemProps

    children: any
 

class SidebarItem extends React.Component<SidebarItemProps, any>  
    //your class methods 

More about using React in TypeScript

【讨论】:

【参考方案4】:

如果您的组件没有状态,则根本不必使用类。您还可以使用for this question 回答的无状态反应组件 (SFC)。

const MyStatelessComponent : React.StatelessComponent<> = props =>
    <li>props.children</li>;

或者,如果您的标记越来越大:

const MyStatelessComponent : React.StatelessComponent<> = props => 

    return <li>props.children</li>;


【讨论】:

虽然这是有效的,当然也不是一个坏建议,但它并不能真正回答问题。这种解决方案只是避免问题,而不是解决问题。

以上是关于TypeScript 属性“道具”不存在的主要内容,如果未能解决你的问题,请参考以下文章

将道具传递给设置时的VueJS 3组合API和TypeScript类型问题:类型上不存在属性“用户”

TypeScript:类型“”上不存在属性

使用 TypeScript 3 扩展道具的 React 组件中的默认属性值

类型中缺少 TypeScript 属性“导航”,但类型“道具”React Native 中需要

Vetur 说,在模板上使用道具时,“从不”类型中不存在道具

将道具传递给样式组件的 TypeScript 错误