【问题标题】:Why does Typescripts "typeof function" satisfies " extends (...args: any[]) => any" Generic Condition为什么 Typescripts“typeof 函数”满足“extends (...args: any[]) => any”一般条件
【发布时间】:2019-12-18 00:55:21
【问题描述】:

给定以下代码:

type Params<F extends (...args: any[]) => any> =
    F extends ((...args: infer A) => any)
    ? A
    : never;

const fn00 = (name: string, age: number, single: boolean) => true

type test07 = Params<typeof fn00>

为什么typeof fn00 满足(...args: any[]) =&gt; any 的通用约束。

根据文档,typeof 运算符仅返回所检查类型的字符串。基本上:

"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"

typeof 的文档在这里: https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards

【问题讨论】:

  • 因为你可以向它传递任何参数并且它返回任何东西。
  • 有两个typeof 运算符。有一个 runtime typeof 执行您所说的操作,还有一个编译时 typeof 计算结果为 TypeScript type

标签: typescript


【解决方案1】:

实际上有两个typeof 运算符。一种是在表达式中,它是 Javascript typeof 运算符。该运算符返回文档中所说的这些可能值之一。

第二个typeof 运算符存在于类型中并返回(在编译时)值(变量、类、函数等)的打字稿类型。 fn00 的 typescript 类型是 (name: string, age: number, single: boolean) =&gt; boolean,所以在类型 type test07 = Params&lt;typeof fn00&gt; 中,typeof fn00 将是这种类型。

如果你在表达式中使用typeof(例如const test = typeof fn00),你确实会得到function

【讨论】:

  • 感谢您的澄清。在没有事先了解 Javascript 功能的情况下阅读 typescript 文档确实令人困惑。
猜你喜欢
  • 2020-02-24
  • 2020-07-07
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2020-10-25
  • 2020-05-12
相关资源
最近更新 更多