typescript - 在 TypeScript 中,泛型参数位于函数之前

标签 typescript

我定义了一个接口(interface)A像这样:

interface A {
  (): any;
  b: any;
};

但是,定义与该接口(interface)兼容的变量并不容易。

我尝试过:

var a: A = function () { console.log('This is a function'); }
a.b = 'This is a field';

此代码段因 Property 'b' is missing in type '() => void' 而失败。我认为这是合理的,因为没有 b定义 a 时的字段.

然后我尝试了这个:

var a: A = <A> function () { console.log('This is a function'); }
a.b = 'This is a field';

这有效,但我不知道这是什么<A> function ...语法是。

如果有人能提供帮助,那就太好了。我把官方文档的各个角落都搜遍了。

谢谢。

最佳答案

var a: A = <A> function () ...

这里,<A>不是泛型,而是强制转换(您可以在末尾写 as A )。您原始声明的问题(缺少强制转换)是您分配的内容没有属性 b到你的变量 a: A (函数本身仅满足您的 (): any 声明)。通过强制转换,您可以断言您的函数确实(或将)具有该属性。

您也可以创建 b可选,将其定义为:

b?: any;

在这种情况下,您不需要强制转换,但我想说这是对可选值的轻微滥用,我认为它更适合选项对象(用作参数)。

请注意,在 TypeScript 中为函数分配属性是不好的做法(这就是你遇到困难的原因),即使语言允许这样做(为了转换旧的 js)。

关于typescript - 在 TypeScript 中,泛型参数位于函数之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040655/

相关文章:

javascript - 坐标到 wkt OpenLayers

javascript - 如何在 TypeScript 中键入带有类的数组?

angular - 传单图: Rotated Marker for ionic2 (Typescript)

javascript - TypeScript 中的 findIndex 数组方法

angular - 如何在不重新加载页面的情况下刷新 Angular 8 中的元素?

html - 无法读取 Object.eval 中未定义的属性 'gender' [作为 updateDirectives]

javascript - 如何使用 jasmine 监视函数并从另一个函数内部返回模拟值?

angular - 在 angular-cli 库项目中使用别名设置 scss 路径

typescript - 将@Injectable() 注入(inject)另一个@Injectable() 时出错

angular - 错误 TS2307 : Cannot find module '@angular/core'