Generic을 공부하다가 이런 응용을 보았었다.
interface Length {
lenth : number
}
function 함수<MyType extends Length>(x: MyType) {
return x.length
}
let a = 함수<string>('hello') //가능
'hello' 는 문자열인데,
interface는 객체이고 타입을 extends
하는데 문자열이 왜 가능한지 ....
문자열 리터럴(작은 따옴표 또는 큰 따옴표로 생성되는)과 생성자 없이(즉. new 키워드를 사용하지 않고) String을 호출하여 반환된 문자열은 원형 문자열(primitive strings)입니다. JavaScript는 자동적으로 원형을 String 오브젝트로 변환하기 때문에, String 오브젝트 메서드를 사용하여 원형문자열을 생성할 수 있습니다.
문자열을 자바스크립트에서 입력하면 자동적으로 primitive
을
String object로 변환하기 때문에 String
오브젝트 메서드를 사용할 수 있다.
그러므로 문자열을 입력하면 타입은 문자열
이지만, String 객체를 사용 할 수 있으므로 타입 허용이 가능하다는 이야기이다.
interface Length {
lenth : number
}
function 함수<MyType extends Length>(x: MyType) {
return x.length
}
let a = 함수<string>('hello') //가능
'hello' 는 타입이 문자열이지만 String 객체로 변환하기에
String {} 객체와 유사하다.
어? 그렇다면 Generic에서 extends는 제한한다는 의미로 알았는데...
interface Length {
lenth : number
}
function 함수<MyType extends Length>(x: MyType) {
return x.length
}
let a = 함수<string>('hello') //가능
let a = r({length:2,value:2}) // 가능
정확히 위의 코드에서는 extends의 의미는 minimum 이라는 의미이다.
function 함수<MyType extends string>(x: MyType) {
return x.length
}
let a = 함수<string>('hello') //가능
let a = r({length:2,value:2}) // 불가능가능
여기서의 extends는 string이 minimum 이라는 의미이다.
왜?