繁体   English   中英

打字稿中的String []和[String]有什么区别?

[英]What's the difference between String[] and [String] in typescript ?

打字稿中的String []和[String]有什么区别? 在两者之间做出选择的最佳选择是什么?

他们是不一样的!

更新:TypeScript 2.7以来,这已不再完全正确(请参阅下面的补充说明):

  • string[]表示变量是一个值为string类型的数组(它可以是任何大小,甚至是空的)。
  • [string]表示变量是一个大小> = 1的数组,第一个条目是一个字符串
    • 自2.7:尺寸=== 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

默认情况下,大小是固定的 因此,如果您希望[string]允许多个条目,则需要以非常丑陋的方式指定:

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会以相同的方式编译它们

let str: String[] = ['ge', 'gege', 'egeg'];
let str2: [String] = ['ge', 'gege', 'egeg'];

将被编译

var str = ['ge', 'gege', 'egeg'];
var str2 = ['ge', 'gege', 'egeg'];

所以他们编译成相同的代码,所以使用你会发现的更好的东西,我建议你的代码库BTW使用相同的约定: - 我使用这个语法let str: String[]=[] ;

注意: - 如果你使用这个语法[String] ,这意味着你应该有一个至少有一个String >>的数组,所以在这种情况下,空数组会给你错误

感谢@Lusito注意完成答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM