generics - 如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?

标签 generics typescript lambda reactjs

使用 Typescript,在 Visual Studio 中键入“.ts”文件,考虑以下声明:

export const foo = <T>(myObject: T) => myObject.toString();

这工作正常,类型检查正常,一切都很好。

现在将完全相同的代码放入用于 JSX 和 React 的“.tsx”文件中。

Intellisense 变得非常沮丧并提示,因为它试图将 变成 React JSX 元素。但我的意图是让编译器将其视为通用类型指示符。

编译器提示:

[gulp-typescript] 17008 JSX element 'T' has no corresponding closing tag.

我已经尝试了很多语法变通办法来尝试让 IDE 和编译器都让我转义 JSX 并强制编译器将 理解为通用的,就像在没有使用 JSX 的情况下一样.但我找不到执行此操作的神奇方法。

有比我聪明的人能解决这个问题吗?

最佳答案

当您只有一个类型参数时,TypeScript 不确定它是否是 JSX 开始标记。它必须选择一个,所以它与 JSX 一起使用。

如果你想要一个具有完全相同语义的函数,你可以显式列出T的约束:

const foo = <T extends {}>(myObject: T) => myObject.toString();

这打破了 TypeScript 的歧义,因此您可以使用泛型类型参数。它还具有相同的语义,因为类型参数始终具有 {} 的隐式约束。

关于generics - 如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112313/

相关文章:

Java:接口(interface)和泛型的简单问题

c# - C# 通用方法的最佳实现,需要根据传入的类类型来定位不同的属性

python - 通用多对多关系

python - 解读 Django 源代码

python - 我可以在 python 中调用 Lambda 表达式中的函数吗

amazon-web-services - 调用 AWS Lambda - API 网关与直接调用

Java 通用问题 : cannot cast Map<K, V> 到 M extends Map<K, V>

css - Angular:Google Material 图标未呈现

typescript - 如何在当前的 TypeScript 中使用 Bluebird?

android - 如何将文本(字符串)插入 ion-textarea?