inflearn logo
강의

Course

Instructor

Bite-Sized TypeScript

Function type expressions and call signatures

함수는 함수타입? 객체타입??

Resolved

91

gxpk0721

21 asked

1

안녕하세요
js 에서 함수가 객체라는것은 이해했습니다.

그래서 개념이 약간 헷갈려서요.

type Operation2 = {
(a : number , b:number): number,
sing: string;
}
let add3 : Operation2 = Object.assign(
  (a: number, b: number) => a + b,
  { sing: "hello" }
);

저 자리는 객체랑 객체를 합쳐서 새로운 합쳐전 객체를 반환하는 assign 함수인데 익명함수를 써 둔것은 함수가 객체이기때문에 라고 이해됐습니다.

 

혼동되는게 ts 에서는 object타입이랑 함수타입이랑 나눠져있어서 혼동됩니다.

함수는 객체인데 또 타입은 함수타입 부분에서 혼동이 되는데 js에서는 함수도 일급객체라고해서요.

함수는 객체인데 타입은 함수타입?..? 이 맞는거죠?


호출할 수 있는 객체 타입(callable object type)”은 곧 함수 타입(function type) 이다.

이 표현이 맞을까요???

image.png

 

typescript

Answer 2

1

winterlood

안녕하세요 이정환입니다.

function은 호출 가능한 형태의 object 라고 이해하시면 됩니다.

위에 첨부해주신 그림에도 obejct 타입이 function의 슈퍼타입(부모 집합)으로 표시되어 있는 것 처럼, function(함수)는 object(객체)에 포함되는 개념입니다.

 

number 타입 아래에 10, 20 과 같은 number 리터럴 타입이 존재하는것과 비슷한 느낌이라고 이해하시면 되겠습니다 !_!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. gxpk0721님.

타입스크립트와 자바스크립트에서의 함수 타입과 객체 타입에 대한 혼란스러움을 설명해드리겠습니다.

함수와 객체의 관계

자바스크립트에서 함수는 “일급 객체(first-class citizens)“입니다. 이것은 함수가 객체로서 다뤄질 수 있음을 의미하죠. 즉, 함수는 변수에 할당될 수도 있고, 다른 함수의 매개변수로 전달될 수도 있으며, 객체지향적으로는 객체의 프로퍼티로도 추가될 수 있습니다. 이것이 함수를 객체라고 부를 수 있는 이유입니다.

타입스크립트에서의 함수 타입

타입스크립트는 이러한 자바스크립트의 특성을 그대로 활용하지만, 추가적으로 정적 타입 시스템을 추가하여 좀 더 명확한 코드 작성을 돕습니다. 따라서 타입스크립트에서는 함수에 대해 구체적인 “함수 타입”을 정의할 수 있습니다.

함수 타입을 정의할 때에는, 함수의 매개변수와 반환 타입을 명시하여 타입의 일관성을 유지할 수 있습니다. 예를 들어, type Operation = (a: number, b: number) => number; 와 같이 함수의 구조를 정의합니다. 반면, 일반 객체 타입은 type ObjType = { prop1: string; prop2: number; };과 같은 방식으로 정의합니다.

코드 설명

제공해주신 코드에서 Object.assign을 통해 함수를 객체와 합치는 과정은 자바스크립트에서 함수가 객체로 취급될 수 있음을 보여줍니다.

type Operation2 = {
  (a: number, b: number): number;
  sing: string;
}

let add3: Operation2 = Object.assign(
  (a: number, b: number) => a + b,
  { sing: "hello" }
);

위의 Operation2 타입 정의는 함수 타입과 객체 타입을 동시에 표현한 형태입니다. 여기서 (a: number, b: number): number; 부분이 함수 타입을 뜻하며, sing: string; 부분이 해당 함수라는 객체의 프로퍼티를 정의하는 부분입니다.

결론

따라서, 타입스크립트에서 함수는 ‘객체’로 취급될 수 있지만, 타입 체계상에서는 함수의 형태를 보다 명확히 규정하기 위해 ‘함수 타입’이라는 개념을 사용해 구분합니다. 자바스크립트에서는 함수도 객체라는 점을 기억하되, 타입스크립트에서는 이 객체로서의 성질을 타입으로 구현할 수 있다는 점이 흥미로운 점입니다.

이미지 URL과 원본 URL:

Image

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

15

2

outDir 옵션 추가 후 컴파일 오류 질문

0

51

1

호출 시그니처 질문

0

63

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

72

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

65

1

할인쿠폰 관련하여

0

151

2

프론트엔드에서의 인터페이스활용

0

90

2

안녕하세요 이정환님!

0

89

1

Node.js 설치에 관한 질문입니다.

0

79

2

함수 타입 호출 시그니처

0

56

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

62

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

114

4

마우스 호버 시 정보

0

90

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

89

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

82

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

135

2

선생님.. 알고리즘도 강의해주시면안되나요

0

99

2

선생님은 어떻게 이런걸 아세요?

0

127

1

type: module

0

96

2

7:17초 업캐스팅 질문이있습니다!

0

75

1

슈퍼타입질문

1

61

2

프로젝트 설치

0

103

2

enum은 비원시 타입이면서 열거형 타입이 되는건가요?

0

67

2

유니온 타입의 분산적 조건부 타입

0

55

2