建议
🔍检索词
x1m0n1x
可行性检查表
我的建议符合以下准则:
- 这不会是对现有TypeScript/JavaScript代码的重大更改
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不基于表达式的类型发出不同JS的情况下实现
- 这不是一个运行时特性(例如,库功能、带JavaScript输出的非ECMAScript语法、JS的新语法糖等)
- 此功能与TypeScript's Design Goals的其余部分一致。
不是100%肯定的最后一个。我觉得它会虽然。
第一种,只有当它是作为一个选择加入的选项。
建议
一个强制Array.join
调用的选项,它只能连接字符串或可赋值的数组元素。join
函数可以用于任何类型的数组(包括any
😉)。即使是与string
完全不兼容的类型。join
函数基本上把它作为一个黑盒子,任何类型的数组类型都被神奇地转化为字符串......不知怎么的,我觉得这不对。
📃激励性示例
这里有一个Playground链接,它说明了此功能可以防止的问题。
💻#用例
当我在做一个有效的Array.join
时一切都很好,但是当我后来决定改变数组中元素的类型,而忘记对join
做一些事情时,它会导致完全正确和可移植的代码,这在运行时会产生奇怪的行为。例如,如果数组元素是一个字符串,现在它们变成了某种对象。
检查一个数组的元素类型是否可以赋值给string
,可以防止这样的错误。为了保持现有代码库的兼容性,我建议在compilerOptions
中选择加入。就像有一个strictFunctionTypes
一样,可能还有一个额外的strictArrayJoins
或类似的东西。
5条答案
按热度按时间ncecgwcz1#
因此,您实际上需要#26357,或者希望将其完全限制为
string
和字符串文字。drkbr07n2#
我不确定我是否想要#26357,也不确定它是否包含
join
,但如果包含的话,那也没问题,因为join
总是连接到一个字符串,所以它实际上将join
限制为字符串类型。bt1cpqcv3#
我提到这个问题是因为您写了“or are assignable to a string”。要确定哪些类型可分配给
string
,您需要这个问题(或者将它限制为string
本身或字符串文字)。envsm3lx4#
对我来说,问题是数组元素从
string
变成了string[]
,这在输出中产生了逗号(在我的例子中是错误的),因为每个string[]
元素都将得到toString
-ed,成为逗号分隔的数组。我希望如果实现了#26357,它不会解决这个特殊的情况,因为
Array
原型确实包括toString
,因此仍然是允许的。我想我所要求的是一个更严格的形式,其中 * 隐式 *
toString()
调用将被阻止。/编辑
执行此操作时已引发错误:
即使它 * 可以 * 允许一个隐式的
toString
。但是,当
join
-ing这样的元素时:突然间一切都好了。希望这能更好地说明问题。
nnvyjq4y5#
join
可能应该被定义为(this: ReadonlyArray<string>, separator?: string | undefined): string;
。这是一个突破性的变化。