•  


isolatedDeclarations should not have warning for functions that have no return statements · Issue #58330 · microsoft/TypeScript · GitHub
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

isolatedDeclarations should not have warning for functions that have no return statements #58330

Closed
Jack-Works opened this issue Apr 26, 2024 · 5 comments
Labels
Declined The issue was declined as something which matches the TypeScript vision Suggestion An idea for TypeScript

Comments

@Jack-Works
Copy link
Contributor

?? Search Terms

isolatedDeclaration

?? Version & Regression Information

5.5.0

? Playground Link

https://www.typescriptlang.org/play/?isolatedDeclarations=true&ts=5.5.0-dev.20240426#code/KYDwDg9gTgLgBAMwK4DsDGMCWEWIBQCUcA3gL5A

?? Code

export
 function
 f
(
)
 {
}

?? Actual behavior

Function must have an explicit return type annotation with --isolatedDeclarations. (9007)

?? Expected behavior

No error

Additional information about the issue

Functions with no return statements can be easily inferred as type void , so there is no need to give this warning.

@jakebailey
Copy link
Member

jakebailey commented Apr 26, 2024

This error is intentional; a function without a return may not always be void .

declare
 function
 fail
(
)
: 
never
;

export
 function
 f
(
)
 {

	fail
(
)
;

}

export
 const
 g
 =
 (
)
 =>
 {

	fail
(
)
;

}

Is:

export
 declare
 function
 f
(
)
: 
void
;

export
 declare
 const
 g
: 
(
)
 =>
 never
;

This can't be determined without type analysis, so is disallowed under isolatedDeclarations .

Playground Link

@RyanCavanaugh
Copy link
Member

Correct error for function expressions, but not function declarations - declarations won't infer never

@jakebailey
Copy link
Member

jakebailey commented Apr 26, 2024

#58331 is indiscriminate in what it affects; if we want to allow this for function declarations only, that may be possible, but it sure seems like an extra inconsistency just to avoid writing : void (and how often do people define a noop function?).

@Jack-Works
Copy link
Contributor Author

hmm, I didn't think of never , so the function expression part is wrong. But I find it annoying to write : void for obviously clear function declarations.

@RyanCavanaugh RyanCavanaugh added Suggestion An idea for TypeScript In Discussion Not yet reached consensus Declined The issue was declined as something which matches the TypeScript vision and removed In Discussion Not yet reached consensus labels May 2, 2024
@RyanCavanaugh
Copy link
Member

Discussed and we don't want to make it untenable to, in the future, change the rules around function declaration return type inference. For example, it's maybe preferable that

function
 dofail
(
)
 {

  Debug
.
fail
(
"oops"
)
;

}

have an inferred return type of never (as it would if written as a function expression) rather than void .

Sign up for free to join this conversation on GitHub . Already have an account? Sign in to comment
Labels
Declined The issue was declined as something which matches the TypeScript vision Suggestion An idea for TypeScript
Projects
None yet
3 participants
- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본