Improve diagnostic when string from property is not assignable to string literal. #26413
Copy link
Copy link
Open
Labels
Domain: Error MessagesThe issue relates to error messagingThe issue relates to error messagingEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Help WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript
Milestone
Description
TypeScript Version: 3.1.0-dev.20180810
Code
interface IceCreamOptions {
readonly cherry: "yes" | "no"
}
declare function iceCream(options: IceCreamOptions): void;
const options = { cherry: "yes" };
iceCream(options);Expected behavior:
Error message recommending to add a type annotation to options. This should be detectable because the source of the failing property is a PropertyAssignment in an object literal being assigned to a variable. (If there is no variable assignment, we could still recommend using ``"yes" as "yes"although that isn't as pretty.) Could also come with a codefix. Note that in JS the fix is slightly different: put/** Type (@type) {IceCreamOptions} /` before the `const` or use `/* Type (@type) {"yes"} */ ("yes")`.
Actual behavior:
Error messages says Type 'string' is not assignable to type '"yes" | "no"'. with no information on how to fix it.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Domain: Error MessagesThe issue relates to error messagingThe issue relates to error messagingEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Help WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript
Activity
Kingwl commentedon Aug 28, 2018
add
"yes" as "yes"is soooooooooooooooooooooooo uglyare there any other way to declare the string literal type?
RyanCavanaugh commentedon Aug 28, 2018
Wenlu Wang (@Kingwl) discussion at #10195
Kingwl commentedon Mar 22, 2019
I'm going to improve this one, but I found the type of diagnostic is
DiagnosticMessageorDiagnosticMessageChainthat without position info, and I cannot get the un-assignable props in the object literal simply,As the problem,i'd like to replace
DiagnosticMessageChainwithDiagnosticRelatedInformationchainfor
isRelatedToand that will hold the position infoping Ryan Cavanaugh (@RyanCavanaugh)
Am I missing anything?