对函数声明强制执行 TSX 道具类型内联,该函数声明使用对象解构来声明道具

Posted

技术标签:

【中文标题】对函数声明强制执行 TSX 道具类型内联,该函数声明使用对象解构来声明道具【英文标题】:Enforcing TSX prop type inline for function declaration which declares props using object destructuring 【发布时间】:2020-08-23 07:29:36 【问题描述】:

我有一个自定义类型

export class MyClass 
  name: string;
  img: string;

  constructor(name: string) 
    this.name = name;
    this.img = `/images/$name.jpg`;
  

我有一个无状态函数组件,它以该类型为参数

export default (issue: Issue) => 
...

当我尝试创建无状态功能组件时

<MagazineCard issue=issues[0] as Issue />

我得到了错误

Type ' issue: any; ' is not assignable to type 'IntrinsicAttributes & Issue'.

下面有一个解决方案,但我觉得我应该将此材料留给可能会看到此问题的其他人,以获得替代解决方案和更深入的理解

Object destructuring when initializing the JSX,例如:

<MagazineCard ...issues[0] />

Create an interface 用于我的无状态功能组件的参数。

注意:types don't need to be specified

属性类型

MagazineCard.propTypes = 
  issue: Issue

【问题讨论】:

(issue)(issue) 非常不同。你可以写(issue: issue: Issue),但我怀疑你知道这一点并且正在寻找其他东西。 是的,我在使用 (issue) 时遇到了另一个错误,因为我是 typescript 新手,但不确定正确的方法是什么 但这是正确的形式。你不能使用(issue) 这不仅仅是一个 TypeScript 错误,它会在运行时失败 【参考方案1】:

这是怎么做的

export default (issue : issue : Issue) =>  => (
    //...Your JSX component
)

我很困惑,因为它对我来说似乎过于复杂,所以我made a post on reddit asking why this is the syntax for doing it

【讨论】:

以上是关于对函数声明强制执行 TSX 道具类型内联,该函数声明使用对象解构来声明道具的主要内容,如果未能解决你的问题,请参考以下文章

内联函数对作用

强制函数在Clang / LLVM中内联

C++ (P70—)

OpenMP 为内联函数声明 SIMD

Kotlin高阶函数内联函数以及集合变换序列

内联宏与普通函数