这是一个打字稿界面:
interface A {
l: { x: string; y:number }
}
但这(类似的事情)会产生错误:
interface A {
l: { x: string, y:number }
}
// => Error: ';' expected.
在规范第 37 页上:http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf
我看到确实指定了;
应该出现在那里,但是来自 JavaScript,对象文字中间的分号看起来是错误的。
做出这个决定是为了避免解析器中的歧义,还是出于其他原因?
从 TypeScript 1.6 左右开始,您现在可以使用,
or ;
作为分隔符interface
声明或匿名对象类型!该团队认为使用其中一种或另一种的灵活性超过了“旧答案”部分中列出的问题。
你仍然需要使用;
在类声明中消除歧义:
x = 3;
class X {
// Could be parsed as expression with comma operator,
// or two declarations
y = 1, x = 3;
}
我保留了下面的旧答案以了解历史背景
旧答案
从技术上讲,这两种方式都可以,但使用分号有很多充分的理由。
在编程语言中,更常见的是标记结尾的分号lines和逗号分隔事物within一行(有一些例外,例如枚举)。大多数 TypeScript 类型都足够大,可以跨越多行,这使得分号成为更好的选择。
人们还希望接口和类看起来相似。考虑这样的事情:
interface Point {
x: number;
y: number;
}
class MyPoint {
x: number;
y: number;
}
制作起来容易多了MyPoint
实施Point
通过复制和粘贴,或者将某些内容从接口更改为类,反之亦然,如果它们使用相同的分隔符。可以说,您可以将逗号作为类声明中的分隔字符,但要成为第一个这样做的常用编程语言却很难。
我们还希望能够一目了然地区分对象文字和类型文字。虽然是单人成员{ x: string }
可以取决于上下文,当上下文在复杂表达式中不明显时,如果您可以根据分隔符区分它们,那就更好了。
最后,常用的所有其他语言interface
语法使用分号。如有疑问,请遵循约定,类型文字和接口的语法应该确实使用相同的分隔字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)