TypeScript 剖析型别的优先级

vbopmzt1  于 2022-10-29  发布在  TypeScript
关注(0)|答案(5)|浏览(160)

在我看来,应该解析以下代码,但实际上没有:

var x: number | (string)=>void;

它使用添加的括号:

var x: number | ((string)=>void);

但是,如果解析器不是太笨拙,那么也许第一个解析器很容易工作?
(FWIW,我在一个rest参数中遇到了这个问题,在这个参数中最好避免使用

function foo(...xs: (number | ()=>void)[]): void { }

l7mqbcuq

l7mqbcuq1#

这仍然是个问题,因为类型可以被括号括起来(例如var x: string | (number)是有效的)。一般来说,你应该总是像这样把箭头函数类型括起来,因为很难猜出var x: n => number | string的意思。
旁注:参数中的类型名称不是可选的;您必须编写(s: string)=>void(请参阅)

9fkzdhlc

9fkzdhlc2#

我可能会读为(n => number) | string,所以我肯定会括号中的number | string,如果这是我的意图...所以我想我自然假设=>的优先级高于|&。这是描述在文档中的某处?
并重新边注:那是新闻吗?我看到了

function foo(f: (number) => number): number { return f(0); }
foo("foo");

现在可以按预期工作了,看起来我们的代码中有很多这样的东西......

5us2dqdw

5us2dqdw3#

文件中有描述吗?
这是语法上的问题,我不认为我们在任何地方都明确地写下了优先顺序。
并重新边注:那是新闻吗?我看到了
从很久以前就这样了。那个声明是一个回调函数,它接受一个名为number的隐式类型any的参数。我建议用--noImplicitAny编译来找到这些参数。

3j86kqsm

3j86kqsm4#

那么至少把它变成一个特性请求来描述在某个地方解析类型的优先级......?
(And呸,我把那个例子搞砸了,对不起。)

vi4fp9gy

vi4fp9gy5#

@RyanCavanaugh@mhegazy我能帮上什么忙吗?

相关问题