programing

타이프 스크립트에서 비동기 함수 유형을 정의하는 방법

sourcejob 2023. 2. 28. 23:26
반응형

타이프 스크립트에서 비동기 함수 유형을 정의하는 방법

비동기 함수의 종류를 정의하려고 했지만 컴파일하지 못했습니다.다음을 참조해 주십시오.

interface SearchFn {
    async (subString: string): string;
}

class A {
    private Fn: SearchFn
    public async do():Promise<string> {
        await this.Fn("fds") // complain here: cannot invoke an expression whose type lacks a call signature
        return ''
    }
}

누가 나 좀 도와줄래?

이 기능은 함수의 반환 유형을 Promise로 선언하면 작동합니다.

interface SearchFn {
    (subString: string): Promise<boolean>;
}

또는 형식 선언:

type SearchFn = (subString: string) => Promise<boolean>;

마이크로소프트의 TS Linter는 이 두 번째 구문을 권장합니다.

async키워드는 문제의 함수가 사용하는 것을 컴파일러/컴파일러에 나타내기 위해 사용됩니다.await(이를 가능하게 하기 위해 필요한 발판을 설치할 수 있습니다.)

즉,async함수의 구현에만 의미가 있으며 인터페이스의 의미는 없습니다.따라서,async인터페이스의 메서드가 유용하지 않은 경우 함수가 특정 값을 반환한다고 가정합니다.Promise(고객님의 경우)Promise<string>단, 인터페이스의 실장자가 특정 방법으로 이것을 실장하도록 강제하는 것은 원하지 않습니다(사용하는 방법).await).

그래서 다른 사람들이 내 앞에서 말했듯이:

interface SearchFn {
    (subString: string): Promise<string>;
}

그 후, 이 기능을 실장하는 것을 선택하는 사람은, 모두, 이 기능을 사용하는 것을 선택할 수 있습니다.async, 플레인 올드Promise.then아니면 미래에 나올 새로운 방법론일 수도 있습니다.

반환된 오브젝트의 유형을 Promise 범용에 전달합니다.

type SearchFn = (subString: string): Promise<string>;

다른 방법으로 선언할 수 있습니다.AsyncFunction범용 타입

type AsyncFunction <A,O> = (...args:A) => Promise<O> 
type SearchFn = AsyncFunction<[string], string>

AsyncFunction은 입력(A) 유형과 출력 유형의 두 가지 유형 변수를 수신하는 범용 유형입니다.

언급URL : https://stackoverflow.com/questions/38744159/in-typescript-how-to-define-type-of-async-function

반응형