You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript工具类型获取类方法,避免调用非方法属性报错

如何用TypeScript工具类型提取类的方法名类型?

你可以自定义一个Methods工具类型,专门过滤出类中属于函数类型的键名,避免把属性名误当作方法名调用的问题:

type Methods<T> = {
  [K in keyof T]: T[K] extends Function ? K : never;
}[keyof T];

类型逻辑说明

  • 遍历目标类型T的所有键K
  • 检查键对应的类型T[K]是否为函数类型:是则保留键名K,否则标记为never
  • 最后通过[keyof T]提取所有非never的键,得到类中所有方法名的联合类型

使用示例

先定义一个包含属性和方法的类:

class MyClass {
  className: string = "MyClass";
  sayHello() {
    console.log("Hello!");
  }
  getVersion(): number {
    return 1.0;
  }
}

此时Methods<MyClass>的类型为"sayHello" | "getVersion",仅包含方法名。之后就能安全地做类型断言:

const someMethod = "sayHello";
this.myClass[someMethod as Methods<MyClass>](); // 类型安全,无调用错误风险

而如果用keyof typeof MyClass,得到的是"className" | "sayHello" | "getVersion",包含了非函数的属性名,用这个断言时很容易出现把属性当作方法调用的错误。

内容的提问来源于stack exchange,提问作者Sherif eldeeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:50:04