TS规范§3.9.5说:
形式为
f < T1, T2, ... > ( p1, p2, ... ) : R
的方法签名等同于属性声明
f : { < T1, T2, ... > ( p1, p2, ... ) : R }
。但这并不适用于--strictFunctionTypes
:
interface IFoo1 {
bar(baz?: number): void
}
class Foo1 implements IFoo1 {
bar: (baz: number) => void = (n) => void 0;
}
interface IFoo2 {
bar: { (baz?: number): void }
}
class Foo2 implements IFoo2 {
bar: (baz: number) => void = (n) => void 0; // err: Property 'bar' in type 'Foo2' is not assignable to the same property in base type 'IFoo2'.
}
。
我理解,一般来说,方法的变参性是有意为之的,根据PR:
通过这个PR,我们引入了一个--strictFunctionTypes模式,在该模式下,函数类型参数位置将按照逆变而不是双变进行检查。更严格的检查适用于所有函数类型,除了那些起源于方法或构造函数声明的。
但是如果规范没有在它们不等时说明语法等价,那就太好了。
5条答案
按热度按时间rkue9o1l1#
规范是针对TS 1.8的,我们使用的是3.8版本。毋庸置疑,这个规范已经过时了。请注意,在规范中列出的需要更新的内容。我不建议通过阅读TS规范来学习TS。
uubf1zoe2#
TS团队是否有推荐的学习TS的方法?文档中没有提到这些。
wztqucjr3#
handbook 是要去的地方。
7xllpg7q4#
这段文本内容是:http://www.typescriptlang.org/docs/handbook/type-compatibility.html#function-parameter-bivariance
这段文本内容也没有提到行为。是否可以修改规范而不是规范本身?
puruo6ea5#
是的,它可以——我们接受手册建议/公关文章!然而,我们也是(这也将包括内容)。