microsoft / microsoft/TypeScript
Strict null checks for Map members
Open
Nobody has claimed this yet.
Needs Proposal
Suggestion
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 2.0.0-beta
Code
export interface INode {
type: string;
parentNode?: INode;
}
export interface IIdentifierNode extends INode {
name: string;
}
public static isIdentifierNode (node: INode): node is IIdentifierNode {
return node.type === NodeType.Identifier;
}
var namesMap = new Map<string, string>();
// main part
if (Nodes.isIdentifierNode(node) && namesMap.has(node.name)) {
node.name = namesMap.get(node.name); //`Type 'string | undefined' is not assignable to type 'string'.`
}
Expected behavior:
No errors
Actual behavior:
Type 'string | undefined' is not assignable to type 'string'.
Looks like here no TypeGuards for Maps?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No file or test is named. Start by reproducing the TypeScript 2.0 strict-null-check example with Map.has and Map.get, then trace the type-checking behavior for Map members; done means the shown assignment produces no error while preserving correct undefined handling.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100