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 ofArray<number>, just asDate[]is a shorthand forArray<Date>.
About the readonly type modifier
TypeScript 3.4, introduces the readonly type modifier. With a precision:
the
readonlytype 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>;