programing

TypeScript에서 함수의 반환 유형을 선언하는 방법

bestprogram 2023. 4. 2. 12:00

TypeScript에서 함수의 반환 유형을 선언하는 방법

여기서 TypeScript 언어 사양인 https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md을 확인했는데 함수의 반환 유형을 선언하는 방법을 찾을 수 없었습니다.

아래 코드로 기대했던 내용을 표시했습니다.greet(name:string): string {}

class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet(): string {
    return "Hello, " + this.greeting;
  }
}

내가 쓸 수 있다는 거 알아(name:string) => any단, 이는 주로 콜백 함수를 전달할 때 사용됩니다.

function vote(candidate: string, callback: (result: string) => any) {
  // ...
}

정답입니다.이것이 완전히 동작하는 예입니다.다음은var resultreturn type은 에 지정되어 있기 때문에 암묵적으로 문자열입니다.greet()기능.유형을 다음으로 변경합니다.number경고를 받게 될 겁니다

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() : string {
        return "Hello, " + this.greeting;
    }
} 

var greeter = new Greeter("Hi");
var result = greeter.greet();

다음은 숫자 예제입니다. 이렇게 하면 놀이터 편집기에 빨간색 구불구불한 글자가 표시됩니다.

greet() : number {
    return "Hello, " + this.greeting;
}

화살표 표기법을 사용한 반환 유형은 이전 답변과 동일합니다.

const sum = (a: number, b: number) : number => a + b;
functionName() : ReturnType { ... }

기능 타입에 대한 자세한 내용은 섹션 3.5.3.5 및 3.5.5의 언어 사양을 참조하십시오.

TypeScript 컴파일러는 가능한 한 유형을 추론합니다.이 작업은 명시적인 유형을 지정할 필요가 없습니다.따라서 greet()는 문자열 리터럴을 반환합니다.이 예에서는 함수의 유형이 문자열임을 컴파일러에 통지하고 유형을 지정할 필요가 없습니다.문자열을 반환하는 그리팅 메서드와 숫자 리터럴에 할당된 변수가 있는 그리터 클래스가 있습니다.컴파일러는 두 가지 유형을 모두 유추하여 문자열을 숫자에 할당하려고 하면 오류가 발생합니다.

class Greeter {
    greet() {
        return "Hello, ";  // type infered to be string
    }
} 

var x = 0; // type infered to be number

// now if you try to do this, you will get an error for incompatable types
x = new Greeter().greet(); 

마찬가지로 이 샘플에서는 컴파일러가 정보를 바탕으로 유형을 결정할 수 없기 때문에 오류가 발생합니다.이 예에서는 명시적으로 반환 유형을 지정해야 합니다.

function foo(){
    if (true)
        return "string"; 
    else 
        return 0;
}

단, 이 방법은 유효합니다.

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}

여러 함수와 함께 사용할 외부 반환 유형 선언:

type ValidationReturnType = string | boolean;

function isEqual(number1: number, number2: number): ValidationReturnType {
    return number1 == number2 ? true : 'Numbers are not equal.';
}

tldr;

getUserRole(name: string) {
   const roles: Role[] = [{ name: 'admin' }, { name: 'admin' }]
   return roles.find(role => role.name === name) || null;
}


let userRole: ReturnType<typeof getUserRole>; // as type of Role | null
function getTime(): number {
  return new Date().getTime();
} 

다음 예에서는 숫자 대신 임의의 유형을 지정할 수 있습니다.또, union 타입의 도움을 받아 입력과 출력의 양쪽 모두에 복수의 유형을 지정할 수도 있습니다.다음은 예를 제시하겠습니다.

 function testfunction(value:string | number):string | number{

return value;
  }

입력값은 문자열 또는 숫자일 수 있습니다.

출력값에는 문자열 또는 숫자를 사용할 수 있습니다.

함수식 반환 유형의 는 다음과 같습니다.

const testFunction = (value:string|number):string | number =>{
    return value;
}

Generic type

const foo = <T>(x: T):T => x;

언급URL : https://stackoverflow.com/questions/12736269/how-to-declare-return-types-for-functions-in-typescript