Typescript中:和=>的区别是什么?

4

我想知道在Typescript中方法头部的 => 和 : 有什么区别?谢谢

  methodA: (
    fieldA: string,
  ) => interfaceA;

  methodA(
    fieldA: string
  ): interfaceA;

  1. 在接口声明中使用,第二个在函数声明中使用。
- Medet Tleukabiluly
没有太大的区别,但后者允许您定义重载。 - zenly
1个回答

2

这里有一个很大的区别。方法是双变量的。这意味着使用它们不安全。看看这个例子:


interface Bivariant {
    methodA(fieldA: string | number): void;
}


const bivariant: Bivariant = {
    methodA(fieldA: string) { // string is assignable to `fieldA` argument, not safe because it might be a number
        fieldA.includes('a')
    }
}

const foo = (arg: Bivariant) => {
    arg.methodA(42) // ok
}

foo(bivariant) // runtime error, no TS error

Playground

请运行此代码。您将收到一个运行时错误,因为bivariant中的methodA const期望一个string参数,而TS不会抱怨,而根据Bivariant接口,它也可能是一个number。反过来,函数foo允许您使用number调用arg.methodA

现在,请尝试使用箭头函数重新编写Bivariance接口:

interface Bivariant {
    methodA:(fieldA: string | number) => void;
}

你会收到一个错误。

这种行为是设计上的。请参见文档文档

除此之外,请检查:

  • Stephan Boyer这篇文章
  • Titian-Cernicova-Dragomir的这个视频
  • 我的问题,其中我列出了关于* -variance的所有链接,因为这个主题非常有趣。
  • 在这里您可以找到我的文章,其中包含一些TS变异的示例

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接