A | B 타입을 반환하는 test 함수를 호출하여 target1, target2, target3에 각각 대입하면 예상대로 전부 에러가 발생합니다.
튜플은 배열보다 좁은 타입입니다. 따라서 튜플은 배열에 대입할 수 있으나, 배열은 튜플에 대입할 수 없습니다.
let a: ['hi', 'readonly'] = ['hi', 'readonly'];
let b: string[] = ['hi', 'normal'];
a = b;
// Type 'string[]' is not assignable to type '["hi", "readonly"]'. Target requires 2 element(s) but source may have fewer.
b = a;
배열이나 튜플에는 readonly 수식어를 붙일 수 있었습니다. readonly 수식어가 붙은 배열이 더 넓은 타입입니다.
let a: readonly string[] = ['hi', 'readonly'];
let b: string[] = ['hi', 'normal'];
a = b;
b = a;
// The type 'readonly ["hi", "readonly"]' is 'readonly' and cannot be assigned to the mutable type 'string[]'.