打字稿中String []和[String]的区别是什么? 在两者之间做出选择的最佳选择是什么?
答案 0 :(得分:7)
他们不一样!
更新:由于TypeScript 2.7这已不再完全正确(请参阅下面的补充说明):
string[]
表示变量是一个值为string类型的数组(它可以是任何大小,甚至是空的。)[string]
表示变量是一个大小为> = 1的数组,第一个条目是一个字符串
[type]
语法可以扩展,如[type1,type2,type3,typeN]
,然后要求数组的大小至少为N,前N个类型是指定的,而以下类型是联合的那些类型。说明此问题的一些不同示例:
const testA: string[] = []; // good
const testB: [string] = []; // Error, array must have a string at position 0
const testC: [string, number] = ["a", 0]; // good
const testC1 = testC[0]; // testC1 is detected to be string
const testC2 = testC[1]; // testC2 is detected to be number
const testD: [string, number] = ["a", 0, "1"]; // good before 2.7, bad afterwards
const testD1 = testD[2]; // testD1 is detected to be string | number
const testE: [string, number] = ["a", 0, 1]; // good before 2.7, bad afterwards
const testE1 = testE[2]; // testE1 is detected to be string | number
const testF: [string, number] = ["a", 0, null]; // Error, null is not of type string|number
自TypeScript 2.7
The size is by default fixed。因此,如果您希望[string]允许多个条目,则需要以非常丑陋的方式指定:
interface MinimumStrTuple extends Array<number | string> {
0: string;
}
答案 1 :(得分:0)
回到基础,什么是TypeScript? TypeScript是JavaScript的类型超集,最终编译为javascript
如果你编写像这样的代码,Javascript不支持类型
// its OK to write code like
let str = 'sfafsa' ;
str = true ;
但TypeScript可以帮助您编写类型代码,如果您尝试分配的值不是变量的类型,则在编译之前会出现错误 如果您尝试使用varynet语法来编写数组
他们是一样的为什么?因为typescript会编译它们相同 例如
let str: String[] = ['ge', 'gege', 'egeg'];
let str2: [String] = ['ge', 'gege', 'egeg'];
将被编译为
var str = ['ge', 'gege', 'egeg'];
var str2 = ['ge', 'gege', 'egeg'];
所以他们编译成相同的代码,所以使用你能找到的更好的东西,我建议你的代码库使用相同的约定
顺便说一句: - 我使用这种语法let str: String[]=[]
;
注意: - 如果您使用此语法 [String] ,则表示您应该拥有至少包含一个String&gt;&gt;的数组。所以在这种情况下,空数组会给你错误
感谢@Lusito注意完成答案。