TypeScript의 setTimeout에 사용할 반환 유형을 선택하십시오.
다음 코드를 고려하십시오.
const timer: number = setTimeout(() => '', 1000);
타이프스크립트가 다음 오류를 발생시킵니다.Type 'Timer' is not assignable to type 'number'.퀵 룩업을 통해 알 수 있듯이setTimeout돌아온다NodeJS.Timer.
하지만 브라우저 기반 개발을 하는 경우NodeJS.Timer기분이 안 좋아올바른 유형 정의와 반환 유형은 무엇입니까?setTimeout의지하지 않고 일하다any신고할 수 있습니까?
가장 간단한 해결책은 유형을 전혀 지정하지 않고 유형 추론이 작동하도록 허용하는 것입니다.유형을 지정해야 하는 경우 브라우저 선언과 노드 선언 간에 유형이 일치하지 않으므로 다음을 사용할 수 있습니다.ReturnType변수 유형이 반환 유형이 무엇이든 지정한다.setTimeout다음과 같습니다.
const timer: ReturnType<typeof setTimeout> = setTimeout(() => '', 1000);
또,window.setTimeout뿐만 아니라 사용할 수도 있습니다.setTimeout올바른 반환 유형을 반환합니다.
사용할 수 있습니다.window.setTimeout타입을 반환한다.number.
let a: number;
a = window.setTimeout(function() {}, 0);
이것은 Typescript가 아래의 모든 유형 정의를 검색하기 때문에 발생합니다.node_modules/@types
노드를 설치한 경우JS 유형 정의(많은 npm 패키지와 함께 제공됨)는~/node_modules/@types/node/globals.ts그리고 당신의 프로젝트는~/Projects/myproject, NodeJS 정의setTimeout새요.
기본적으로는 표시되는 모든 "@types" 패키지가 컴파일에 포함됩니다.엔클로징 폴더의 node_modules/@types 내의 패키지는 표시되는 것으로 간주됩니다.구체적으로는 ./node_modules/@types/, ../../node_modules/@types/ 등의 패키지를 의미합니다.
참조: https://www.typescriptlang.org/tsconfig#types
Typescript가 사용자 지정 유형 정의를 찾으면 기본 유형 정의보다 우선됩니다.
솔루션:
- 컴파일러 유형 정의를 검색할 경로 지정 옵션:
"typeRoots":[] - 컴파일러 기본 경로에서 로드할 정의 유형을 지정합니다.
"types": [] - 기본 검색 경로에서 정의 파일 제거
회피책:
- 사용하다
window.setTimeout()대신
window.setTimeout돌아온다number이상적으로는, 독자적인 타입을 정의해 번호와 구별하는 것(또, 다음과 같은 조작을 회피하는 것)이 필요합니다.+타이머에게는 의미가 없습니다).
type TimerHandle = number;
이 에러가 발생한 다른 사용자는 tsconfig.js 파일에 다음과 같이 추가합니다.
"compilerOptions": {
...
"types": [],
}
저 같은 경우에는 노드 내에서 작업하고 있었기 때문에NodeJS.Timeout
언급URL : https://stackoverflow.com/questions/51040703/what-return-type-should-be-used-for-settimeout-in-typescript
'codememo' 카테고리의 다른 글
| swagger ui와 함께 @RequestParam 주석 메서드 사용 (0) | 2023.04.03 |
|---|---|
| 템플릿 파일 내에서 WordPress의 "기본 URL"을 얻을 수 있습니까? (0) | 2023.04.03 |
| Wordpress: WP_post_name에 대한 검색 조건 쿼리 (0) | 2023.04.03 |
| Netflix Feign - 마이크로 서비스를 통해 상태 및 예외 전파 (0) | 2023.04.03 |
| Wordpress - 사용자 지정 투고 유형에 피쳐 이미지 추가 (0) | 2023.04.03 |