在TypeScript中,函数前的泛型参数

时间:2016-01-27 14:56:22

标签: typescript

我已经定义了这样的接口A

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

但是,定义与此接口兼容的变量并不容易。

我试过了:

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 ...语法是什么。

如果有人可以提供帮助,那就太好了。我搜索了官方文件的每个角落。

感谢。

1 个答案:

答案 0 :(得分:2)

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

在这里,<A>不是通用的,它是一个演员(你最后可以写as A)。原始语句(缺少演员表)的问题在于,您正在为变量b分配没有属性a: A的内容(函数本身只会满足您的(): any b 1}}声明)。通过强制转换,您断言您的函数确实(或将)拥有该属性。

您也可以通过将b?: any; 定义为:{/ 1>来使perl成为可选项

perluniprops

在这种情况下,您不需要演员表,但我会说这是对可选项的轻度滥用,我认为它更适合于选项对象(用作参数)。

请注意,在TypeScript中为函数指定属性是不好的做法(这就是为什么遇到困难),即使语言允许它(为了转换旧的js)。