在 TypeScript 中,String[] 和 [String] 有什么区别?两者之间选择哪个更好?
在 TypeScript 中,String[] 和 [String] 有什么区别?两者之间选择哪个更好?
它们不是相同的!
更新:自从TypeScript 2.7以来,这个说法不再完全正确(请参见下面的补充):
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
interface MinimumStrTuple extends Array<number | string> {
0: string;
}
回到基础,什么是TypeScript? TypeScript是JavaScript的一种带类型的超集,在最终编译为JavaScript。
如果你写这样的代码,JavaScript不支持类型。
// its OK to write code like
let str = 'sfafsa' ;
str = true ;
但是TypeScript可以帮助您编写类型化的代码,如果您尝试分配与变量类型不匹配的值,则在编译之前会出现错误。如果您尝试使用不同的语法编写数组,TypeScript也会进行相同的编译。
它们是相同的为什么?因为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] ,那么这意味着您应该有至少一个字符串数组>> 因此,在这种情况下,空数组将导致错误
感谢@Lusito注意完整回答。
let a:[String]
会期望a
是一个数组,其第一个索引是 String 类型。例如,let a:[string,number]
会期望a
数组的第一个元素是字符串类型,第二个元素是数字类型。来源于此链接 - Jhecht