TypeScript TS规范与实现不匹配,re方法签名定义

djmepvbi  于 5个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(160)

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模式,在该模式下,函数类型参数位置将按照逆变而不是双变进行检查。更严格的检查适用于所有函数类型,除了那些起源于方法或构造函数声明的
但是如果规范没有在它们不等时说明语法等价,那就太好了。

rkue9o1l

rkue9o1l1#

规范是针对TS 1.8的,我们使用的是3.8版本。毋庸置疑,这个规范已经过时了。请注意,在规范中列出的需要更新的内容。我不建议通过阅读TS规范来学习TS。

uubf1zoe

uubf1zoe2#

TS团队是否有推荐的学习TS的方法?文档中没有提到这些。

7xllpg7q

7xllpg7q4#

这段文本内容是:http://www.typescriptlang.org/docs/handbook/type-compatibility.html#function-parameter-bivariance
这段文本内容也没有提到行为。是否可以修改规范而不是规范本身?

puruo6ea

puruo6ea5#

是的,它可以——我们接受手册建议/公关文章!然而,我们也是(这也将包括内容)。

相关问题