const bestSongs = ["black swan", "I NEED YOU"];
// ok: "IDOL" 의 타입은 string
bestSongs.push("IDOL");
bestSongs.push(true);
// Error: Argument of type 'boolean' is not assignable to parameter of type 'string'
let btnAlbums: number[];
btnAlbums = [2, 4, 8, 12, 16, 18, 20, 22];
// 타입은 string 배열을 반환하는 함수
let arr1: () => string[];
// 타입은 각각의 string을 반환하는 함수 배열
let arr2: (() => string)[];
// 타입은 string 또는 number의 배열
let arr1: string | number[];
// 타입은 각각 number or string의 요소인 배열
let arr2: (string | number)[];
// 타입: (string | undefined)[]
const teamMember = [
"taetae",
"suga",
"RM",
undefined,
];
// 타비 : any[]
let values: [];
// 타입 : string[]
values.push('');
// 타입: (number | string)[]
values[0] = 0;
-2차원 배열 또는 배열의 배열은 두 개의 를 갖는다.
let lifeGoesOn: number[][];
lifeGoesOn = [
[1,2,3],
[2,4,6],
[3,6,9],
];
const bestSongs = ["Run", "DNA"];
// 타입: string
const bestSong = bestSongs[0];
const btsMembers = ["V", new Date(1995, 12, 30)];
// 타입 : string | Date
const btsMember = btsMembers[0];
function withMembers(members: string[]) {
console.log(members[1995].length); // 타입 오류 없음
}
withMembers(["For", "youth"]);
// 타입: string[]
const btsMember = ["V", "JK", "Jimin"];
// 타입: number[]
const btsAge : [29, 27, 29];
// 타입 : (string | number)[]
const hybe = [...bts, ...btsAge];
function hybe(greeting: string, ...names: string[]) {
for(const name of names) {
console.log('${greeting}, ${name}!');
}
}
const member = ["V", "RM", "JK"];
member("Hello", ...member);
const bithYears = [1995, 1994, 1997];
member("Born in", ...birthYears);
// Error: Argument of type 'number' is not assignable to parameter of type 'string'.
let yearAndbts: [number, string];
yearAndbts = [7, "BangTan"];
yeearAndbts = [false, "Bangtan"];
// Error: Type 'boolean' is not assignable to type 'number'
yearAndbts = [7];
//Error: Type '[number]' is not assignable to type '[number, string]'.
// source has 1 elements(s) but target requires2
// year 타입: number
// bts 타입 : string
let [year, bts] = Math.random() > 0.5
? [7, "BangTan"]
: [5, "NewJeans"];
// 타입: (boolean | number)[]
const pairLoose = [false, 123]
const pairTupleLoose: [boolean, number] = pairLoose;
// Error: Type '(number | boolean)[]' is not assignable to type '[boolean, number]'
// Target requires 2 elements(s) but source may have fewer.
const bts = [boolean, number, string] = [false, 2013, "BangTan"];
const btsNewJeans: [boolean, number] = [bts[0], bts[1]];
const btsBlakPink: [boolean, number] = bts;
// Error: Type '[boolean, number, string]' is not assignable to type '[boolean, number]'
// source has 3 elements(s) but target allows only 2
function newJeans(name: string, value: number) {
console.log('${name} has ${value}');
}
const hybeArray = ["V", 1];
newJeans(..hybeArray);
// Error: A spread argument must either have a tuple type or be passed to a rest paramter.
const hybeTomorrow: [number, string] = [5, "TXT"];
newJeans(...hybeTomorrow);
// Error: Argument of type 'number is not assignable to parameter of type 'string'
const hybeSpring: [string, number] = ["flower", 4];
newJeans(hybeSpring); // ok
function logPair(name: string, value: [number, boolean]) {
console.log('${name} has ${value[0]} (${value[1]}');
}
const trios: [string, [number, boolean]][] = [
["V", [1, true]],
["Rm", [2, false]],
["JK", [3, false]]
];
trios.forEach(trio => logtrio(..trio)); ///ok
trios.forEach(logpair);
//Error: Argument of type '(name: string, value: [number, boolean]) => vild
trios.forEach(trio => logTrio(...trio))
는 각 ...trio가 logTrio의 매개변수 타입과 일치하므로 안전하다. trio.forEach(logTrio)
는 첫번째 매개변수로 타입이 string인 [string, [number, boolean]] 전체를 전달하려고 시도하기 때문에 할당 할 수없다.-타입스크립트 생성된 배열을 튜플이 아닌 가변 길이의 배열로 취급한다.
//반환 타입 : (string | number)[]
function hybe(input: string) {
return [input[0], input,.length];
}
// hybe 타입: string | number
// size 타입: string | number
const [hybeNew, size] = hybe("bts");
=> [string, number] 아니라 (string | number)[]를 반환하는 것으로 유추 된다.
//반환 타입 : [string, number]
function hybeToSizebts(input: string): [string,number] {
return [inpit[0], input.length];
}
// hybeSize 타입: string
// size 타입 : number
const [hybeTo, size] = hybeNewJeans("bts");
// 타입 : (string |number)
const taetae = [1995, "V"];
// 타입 : readonly [1995, "V"]
const readonlyTuple = [1995, "V"] as const;
const taetae: [number, string] = [1995, "v"];
taeatae[0] = 12431; // ok
const taetaeNew: [number, string] = [1995, "v"] as const;
//Error: The type 'readonly [1995, "V"] is "readonly'
// and cannot be assigned to the mutable type '[number, string]'.
const taetaeConst = [1995, "v"] as const;
taetaeConst[0] = 1230;
// Error : Cannot asign to '0' because it is a read-only property.
알게된 점)
readonly 속성은 불리언 속성으로서 해당 속성을 명시하지 않으면 속성값이 자동으로 false 값을 가지게 되며, 명시되면 자동으로 true 값을 가지게 된다.
// 반환 타입: readonly [string, number]
function hybeToSizeConst(input: string) {
return [input[0], input.length] as const;
}
// hybeTo 타입 : string
// size 타입 : number
const [hybeTo, size] = hybetoSizeConst("V");
[Reference]
1. Learning typeScript(조시 골드버그/고승원/한빛미디어_2023)