Array<Type> VS Type[] in Typescript
TypescriptTypescript Problem Overview
As far as I know a property's type can be defined in two ways when it's an Array.
property_name: type
where type can be either
Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)
and
string[], MyType[], etc. (e.g. let prop1: string[])
What is the difference between the two cases? Or am I misunderstanding something (perhaps something about <> used in casting?)
EDIT since the question is marked as duplicate, I am aware there is the other question about any[] but still I had a look at it before posting and to me it was more about the type 'any' than the different [] VS <> I asked
Typescript Solutions
Solution 1 - Typescript
There isn't any semantic difference
There is no difference at all. Type[]
is the shorthand syntax for an array of Type
. Array<Type>
is the generic syntax. They are completely equivalent.
The handbook provides an example here. It is equivalent to write:
function loggingIdentity<T>(arg: T[]): T[] {
console.log(arg.length);
return arg;
}
Or:
function loggingIdentity<T>(arg: Array<T>): Array<T> {
console.log(arg.length);
return arg;
}
And here is a quote from some release notes:
> Specifically, number[]
is a shorthand version of Array<number>
, just as Date[]
is a shorthand for Array<Date>
.
readonly
type modifier
About the TypeScript 3.4, introduces the readonly
type modifier. With a precision:
> the readonly
type modifier can only be used for syntax on array types and tuple types
let err2: readonly Array<boolean>; // error!
let okay: readonly boolean[]; // works fine
The following declaration is equivalent to readonly boolean[]
:
let okay2: ReadonlyArray<boolean>;
Solution 2 - Typescript
There is a difference when you are defining fixed length arrays. You can't define a fixed length array with Array<>
, you have to use the shorthand syntax:
const myFunc1 = (arg: [string, number, boolean]) => {
console.log(arg);
};
myFunc1(["hello world", 123, true]);
// error: TS2314: Generic type 'Array ' requires 1 type argument(s).
const myFunc2 = (arg: Array<string, number, boolean>) => {
console.log(arg);
};
myFunc2(["hello world", 123, true])