函数参数,可以是字符串或数字,也可以是返回字符串或数字的函数

Posted

技术标签:

【中文标题】函数参数,可以是字符串或数字,也可以是返回字符串或数字的函数【英文标题】:Function paramater that is either a string or a number or a function that returns either a string or a number 【发布时间】:2019-04-29 17:35:54 【问题描述】:

我正在使用 TypeScript 构建一个 React 应用程序。

我正在尝试定义一个函数(对于 HOC),该函数接受一个名为 value 的参数,该参数可以是字符串或数字,也可以是返回字符串或数字的函数。

所以我尝试的是:

const myHOC = (
  value: string | number | () => string | () => number
) => WrappedComponent => // ...

但是 TSLint 抱怨第二个 | 之后的所有内容(所以基本上是关于这两个函数)。

上面写着:

[ts] Type expected. [1110]

对于()

[ts] ',' expected. [1005]

对于=>

[ts] 'string' only refers to a type, but is being used as a value here. [2693]
[tslint] Forbidden bitwise operation [no-bitwise]

分别为string / number

我如何告诉 TypeScript value 是什么?

【问题讨论】:

“TSLint 抱怨” - 它到底在说什么? @kinduser 编辑了问题。 我猜它无法正确解析它。试试string | number | (() => string) | (() => number); 【参考方案1】:

TSLint(以及 TypeScript)无法正确解析它,你可以将你的函数类型包装到大括号中,让它理解你的目标。

const myHOC = (
  value: string | number | (() => string) | (() => number)
) => WrappedComponent;

编辑:如果您希望这两种函数类型接受可选参数,即 WrappedComponent 道具,则必须导入代表该组件道具的接口(如果它们不在范围内)并在它们内部使用问号?,让 TS 知道它是可选的。

import  WrappedComponentProps  from './WrappedComponent';

const myHOC = (
  value: string | 
         number | 
         ((props?: WrappedComponentProps ) => string) |
         ((props?: WrappedComponentProps ) => number)
) => WrappedComponent;

【讨论】:

谢谢你的作品!正如一个后续问题:我如何告诉打字稿这对于任何具有任何参数的函数都应该没问题(只要返回正确)?因为当 value 是一个接受参数的函数时,TypeScript 现在会抱怨,但我需要这样做。 @J.Hesters 你想让他们都接受一个可选参数吗? 您还可以创建类型别名以使其更具可读性:type StringOrNumber = string | number; type FnStringOrNumber = () => StringOrNumber; const myHOC = ( value: StringOrNumber | FnStringOrNumber ) => WrappedComponent => ...; @kinduser 具体来说,如果我能以某种方式告诉 typescript 这些函数的输入参数是WrappedComponent 的道具,我会很高兴,因为在 HOC 中的某个时刻有这一行: const badgeValue = typeof value === "function" ? value(this.props) : value;. @J.Hesters 我已经更新了我的答案,如果它对你有用,请告诉我。

以上是关于函数参数,可以是字符串或数字,也可以是返回字符串或数字的函数的主要内容,如果未能解决你的问题,请参考以下文章

ctype.h库函数----字符操作函数

eval()函数与int()函数的区别

eval()函数与int()函数的区别

OracleOracle中dump函数的用法

UVa-10815 安迪的第一个词典

pb中的类型转换函数