我已经定义了这样的接口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 ...
语法是什么。
如果有人可以提供帮助,那就太好了。我搜索了官方文件的每个角落。
感谢。
答案 0 :(得分:2)
var a: A = <A> function () ...
在这里,<A>
不是通用的,它是一个演员(你最后可以写as A
)。原始语句(缺少演员表)的问题在于,您正在为变量b
分配没有属性a: A
的内容(函数本身只会满足您的(): any
b
1}}声明)。通过强制转换,您断言您的函数确实(或将)拥有该属性。
您也可以通过将b?: any;
定义为:{/ 1>来使perl
成为可选项
perluniprops
在这种情况下,您不需要演员表,但我会说这是对可选项的轻度滥用,我认为它更适合于选项对象(用作参数)。
请注意,在TypeScript中为函数指定属性是不好的做法(这就是为什么遇到困难),即使语言允许它(为了转换旧的js)。