泛型约束的keyof类型是如何工作的



什么是"键入";TypeScript中的平均值?

我发现上面的问题中,作者问了与我想问的完全相同的问题,但没有答案找到问题的要点。

假设有一个通用方法和一个类。

function fn<K extends keyof typeof A>(key: K) ...
class A {
static a;
static b;
}

我的理由是:

  1. typeof关键字返回一个字符串,显示js的基本类型之一。

  2. 因此,无论值是什么,返回类型都是字符串。

  3. 所以关键的"应该是索引;长度";以及字符串文字可以拥有的东西。在这种情况下;函数";应返回类型";0〃|"1〃|"2〃|"3〃|"4〃|"5〃|"6〃|"7〃|"长度";。

  4. 但实际的行为是typeof类A返回构造函数。

这怎么会发生?

typeof关键字返回一个字符串,其中显示一个js基本类型。

这对JavaScript来说是正确的,但在Typescript中,typeof可能意味着多种含义,具体取决于上下文。与JS不同的是,在TS中,当typeof处于预期类型的上下文中时,typeof expression将计算为expression的(TypeScript确定的(类型。例如:

let num = 5;
type Num = typeof num;

导致CCD_ 5类型为CCD_。这不是字符串'number',而是TypeScript类型number

所以,在你的代码中:

function fn<K extends keyof typeof A>(key: K) ...

由于K extends keyof ...类型上下文(这对于配置TypeScript对代码的解释很有用,但在发出的JavaScript中不存在(,因此以下typeof向TypeScript指示用TypeScript检测到的类型a替换typeof A

相反,当在类型上下文中不是时:

let someStr = 'foo';
const theType = typeof someStr;

这里,typeof运行时JavaScript中使用,而不是作为TypeScript特定的语法,因此它导致theType在运行时被分配值'string'

CCD_ 15的两种使用方式完全不同。

最新更新