【问题标题】:Use a type to declare a method [duplicate]使用类型声明方法[重复]
【发布时间】:2021-03-18 09:42:34
【问题描述】:

我知道如何使用类型来声明类函数

type myType = (val: number) => void;

class myClass {
    myFunction1 = function (val) {  }
    myFunction1Typed : myType  = function (val) {  }
}

但是,我不知道如何使用方法符号来做同样的事情

type myType = (val: number) => void;

class myClass {
    myMethod (val) {  }
    myMethodTyped : myType (val) {  }   // not valid  !!!!!!
}

我无法在文档中找到任何关于此的内容

我的问题是我有一个很棒的代码库声明为方法(我发布的第二个示例)。

现在,我们开始逐步引入一些函数的类型。

我们当然可以随时更改函数的声明,但如果我们能够坚持当前的样式并以某种方式添加类型会更容易。

【问题讨论】:

  • 类函数是一种方法。
  • @Kornflexx 我知道。但是,语法不同。我只是想知道如何使用方法语法来做同样的事情。

标签: typescript type-alias


【解决方案1】:

我很确定没有办法做到这一点。最接近的方法是使用接口:

interface IMyClass {
  myMethod(val: any): number;
}

class MyClass implements IMyClass {
  myMethod(val: any) {
    return 5;
  }
}

所以我的意思是这两个界面略有不同:

interface IMyClass {
  myMethod(val: any): number;
}

interface IMyClass2 {
  myMethod: (val: any) => number;
}

【讨论】:

  • 我已编辑我的问题以使其更清晰。我想要的是一种使这些更改最小化的方法,因此您的解决方案不是我想要的。无论如何谢谢。
【解决方案2】:

我很确定您的第二次语法尝试在 TypeScript 中根本无效/不支持。这也可能是您在文档中找不到任何相关内容的原因。

请注意,TypeScript 基本上只是对强类型提供额外支持的 JavaScript。除了少数例外(在这种情况下,TypeScript 编译器会处理将某些花哨的 TypeScript 表达式编译/转换为合法的目标 JavaScript 表达式),如果你去掉所有 TypeScript 特定的东西,你用 TypeScript 编写的所有内容基本上仍然是合法的 JavaScript。

TypeScript 可以推断和推断很多,但不是全部。您的显式 myType 类型只能用于确保您在 myClass 类中相应地实现 myMethodTyped 方法时不会犯任何与数据类型相关的错误。

还要注意,TypeScript 除了类型之外还提供了接口 的概念,以确保您的函数、方法、类等都经过严格的类型检查。但我不确定在您的情况下使用界面是否是更好的选择。类型和接口都有自己的优点和缺点,因此由您决定使用哪个功能。

【讨论】:

  • 感谢您的帮助。我并没有试图避免示例中的 val,我只是想表明我的一点意图。我已经编辑了我的问题以使其更清楚。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多