(prop, node, right)
| 74797 | return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; |
| 74798 | } |
| 74799 | function checkPropertyNotUsedBeforeDeclaration(prop, node, right) { |
| 74800 | var valueDeclaration = prop.valueDeclaration; |
| 74801 | if (!valueDeclaration || ts.getSourceFileOfNode(node).isDeclarationFile) { |
| 74802 | return; |
| 74803 | } |
| 74804 | var diagnosticMessage; |
| 74805 | var declarationName = ts.idText(right); |
| 74806 | if (isInPropertyInitializerOrClassStaticBlock(node) |
| 74807 | && !isOptionalPropertyDeclaration(valueDeclaration) |
| 74808 | && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression)) |
| 74809 | && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right) |
| 74810 | && !(ts.isMethodDeclaration(valueDeclaration) && ts.getCombinedModifierFlags(valueDeclaration) & 32 /* ModifierFlags.Static */) |
| 74811 | && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) { |
| 74812 | diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName); |
| 74813 | } |
| 74814 | else if (valueDeclaration.kind === 257 /* SyntaxKind.ClassDeclaration */ && |
| 74815 | node.parent.kind !== 178 /* SyntaxKind.TypeReference */ && |
| 74816 | !(valueDeclaration.flags & 16777216 /* NodeFlags.Ambient */) && |
| 74817 | !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) { |
| 74818 | diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName); |
| 74819 | } |
| 74820 | if (diagnosticMessage) { |
| 74821 | ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName)); |
| 74822 | } |
| 74823 | } |
| 74824 | function isInPropertyInitializerOrClassStaticBlock(node) { |
| 74825 | return !!ts.findAncestor(node, function (node) { |
| 74826 | switch (node.kind) { |
no test coverage detected