인프런 커뮤니티 질문&답변

프린이님의 프로필 이미지
프린이

작성한 질문수

타입스크립트 시작하기

[함수타입2] 함수 this에 대한 타입 부분, 제가 제대로 이해했을까요?

작성

·

160

·

수정됨

0

안녕하세요,

해당 섹션에서 this 타입이 각각 왜 string 인지, object인지 , 제가 제대로 이해 했는지 궁금해 질문 드립니다.

 

# 1. 영상 1:07 에서, 함수 getParam의 this

# 2. 영상 1:35 에서, 함수 getShortKeys의 this

 

# 1. 영상 1:07 에서, 함수 getParam의 this

function getParam(this:string, index:number){..중략..}
..중략... 
console.log('asdf,1234,ok'.getParams(1))

this의 타입을 string로 한 이유는,

그 this 키워드를 정의한 함수,getParam는

function 키워드로 함수를 선언했고,

string('asdf,1234,ok'), 즉 문자열이 함수 getParam을 호출했기 때문에,

(=function으로 선언한 함수는, 해당 함수를 어떤 객체가 호출 했느냐로, this의 값(타입)이 결정되기 때문에 )

this가 string타입으로 되는건가요?

 

그래서

function getParam(this:string, index:number){
  const params = this.splte(",")
}

this는 이미 문자열인 string타입으로 참조되기 때문에,

문자열 함수인 split()를 작성 해야하는 에러인건지요?

 

# 2. 영상 1:35 에서, 함수 getShortKeys의 this

//인터페이스 정의
getShortKeys(this:object):string[]

..중략...

//객체 obj
const obj={a:1, bb:2, ccc:3, ddd:4}

console.log(obj.getShortKeys())

 

this가 object인 이유는 함수,getShortKeys를 object(obj객체)가 호출했기 때문에,

this가 object 타입이 된건가요??

 

답변 1

0

이재승님의 프로필 이미지
이재승
지식공유자

안녕하세요
값과 타입을 구분해서 이해하시는 게 좋을 것 같습니다.

 

* 값 측면: String의 프로토타입에 추가한 함수는 this가 string입니다

* 타입 측면: (값에서)this가 string이기 때문에 타입도 그렇게 정의합니다

 

만약 getParam을 Object의 프로토타입에 추가했다면 타입 측면에서는 타입 에러가 발생하고, 값 측면에서는 런타임 에러가 발생합니다.

 

getShortKeys도 마찬가지입니다

 

* 값 측면: Object의 프로토타입에 추가한 함수는 this가 object입니다

* 타입 측면: (값에서)this가 object이기 때문에 타입도 그렇게 정의합니다

프린이님의 프로필 이미지
프린이

작성한 질문수

질문하기