Add isOptionalUninitializedParameterProperty

Improves declaration emit and code readability
This commit is contained in:
Nathan Shively-Sanders 2017-06-13 11:49:58 -07:00
parent 2a921d4b33
commit 433a06d599
3 changed files with 10 additions and 1 deletions

View File

@ -23128,6 +23128,13 @@ namespace ts {
!(getModifierFlags(parameter) & ModifierFlags.ParameterPropertyModifier);
}
function isOptionalUninitializedParameterProperty(parameter: ParameterDeclaration) {
return strictNullChecks &&
isOptionalParameter(parameter) &&
!parameter.initializer &&
!!(getModifierFlags(parameter) & ModifierFlags.ParameterPropertyModifier);
}
function getNodeCheckFlags(node: Node): NodeCheckFlags {
return getNodeLinks(node).flags;
}
@ -23337,6 +23344,7 @@ namespace ts {
isDeclarationVisible,
isImplementationOfOverload,
isRequiredInitializedParameter,
isOptionalUninitializedParameterProperty,
writeTypeOfDeclaration,
writeReturnTypeOfSignatureDeclaration,
writeTypeOfExpression,

View File

@ -340,7 +340,7 @@ namespace ts {
// these types may need to add `undefined`.
const shouldUseResolverType = declaration.kind === SyntaxKind.Parameter &&
(resolver.isRequiredInitializedParameter(declaration as ParameterDeclaration) ||
(getModifierFlags(declaration) & ModifierFlags.ParameterPropertyModifier && resolver.isOptionalParameter(declaration as ParameterDeclaration)));
resolver.isOptionalUninitializedParameterProperty(declaration as ParameterDeclaration));
if (type && !shouldUseResolverType) {
// Write the type
emitType(type);

View File

@ -2814,6 +2814,7 @@ namespace ts {
collectLinkedAliases(node: Identifier): Node[];
isImplementationOfOverload(node: FunctionLikeDeclaration): boolean | undefined;
isRequiredInitializedParameter(node: ParameterDeclaration): boolean;
isOptionalUninitializedParameterProperty(node: ParameterDeclaration): boolean;
writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;