在我看来,应该解析以下代码,但实际上没有:
var x: number | (string)=>void;
它使用添加的括号:
var x: number | ((string)=>void);
但是,如果解析器不是太笨拙,那么也许第一个解析器很容易工作?
(FWIW,我在一个rest参数中遇到了这个问题,在这个参数中最好避免使用
function foo(...xs: (number | ()=>void)[]): void { }
)
在我看来,应该解析以下代码,但实际上没有:
var x: number | (string)=>void;
它使用添加的括号:
var x: number | ((string)=>void);
但是,如果解析器不是太笨拙,那么也许第一个解析器很容易工作?
(FWIW,我在一个rest参数中遇到了这个问题,在这个参数中最好避免使用
function foo(...xs: (number | ()=>void)[]): void { }
)
5条答案
按热度按时间l7mqbcuq1#
这仍然是个问题,因为类型可以被括号括起来(例如
var x: string | (number)
是有效的)。一般来说,你应该总是像这样把箭头函数类型括起来,因为很难猜出var x: n => number | string
的意思。旁注:参数中的类型名称不是可选的;您必须编写
(s: string)=>void
(请参阅)9fkzdhlc2#
我可能会读为
(n => number) | string
,所以我肯定会括号中的number | string
,如果这是我的意图...所以我想我自然假设=>
的优先级高于|
和&
。这是描述在文档中的某处?并重新边注:那是新闻吗?我看到了
现在可以按预期工作了,看起来我们的代码中有很多这样的东西......
5us2dqdw3#
文件中有描述吗?
这是语法上的问题,我不认为我们在任何地方都明确地写下了优先顺序。
并重新边注:那是新闻吗?我看到了
从很久以前就这样了。那个声明是一个回调函数,它接受一个名为
number
的隐式类型any
的参数。我建议用--noImplicitAny
编译来找到这些参数。3j86kqsm4#
那么至少把它变成一个特性请求来描述在某个地方解析类型的优先级......?
(And呸,我把那个例子搞砸了,对不起。)
vi4fp9gy5#
@RyanCavanaugh@mhegazy我能帮上什么忙吗?