我定义了一个接口(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/