diff --git a/src/compiler/program.ts b/src/compiler/program.ts
index 0971adfc098..347e6e97ebd 100644
--- a/src/compiler/program.ts
+++ b/src/compiler/program.ts
@@ -908,6 +908,13 @@ namespace ts {
function getSemanticDiagnosticsForFileNoCache(sourceFile: SourceFile, cancellationToken: CancellationToken): Diagnostic[] {
return runWithCancellationToken(() => {
+ // If skipLibCheck is enabled, skip reporting errors if file is a declaration file.
+ // If skipDefaultLibCheck is enabled, skip reporting errors if file contains a
+ // '/// ' directive.
+ if (options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib) {
+ return emptyArray;
+ }
+
const typeChecker = getDiagnosticsProducingTypeChecker();
Debug.assert(!!sourceFile.bindDiagnostics);
diff --git a/tests/cases/compiler/noDefaultLib.ts b/tests/cases/compiler/noDefaultLib.ts
index 92c8a63fc64..fa1230e4cfe 100644
--- a/tests/cases/compiler/noDefaultLib.ts
+++ b/tests/cases/compiler/noDefaultLib.ts
@@ -1,3 +1,4 @@
+// @skipDefaultLibCheck: false
///
var x;
diff --git a/tests/cases/compiler/variableDeclarationInStrictMode1.ts b/tests/cases/compiler/variableDeclarationInStrictMode1.ts
index 266e5af44ae..5785beb32aa 100644
--- a/tests/cases/compiler/variableDeclarationInStrictMode1.ts
+++ b/tests/cases/compiler/variableDeclarationInStrictMode1.ts
@@ -1,2 +1,3 @@
+// @skipDefaultLibCheck: false
"use strict";
var eval;
\ No newline at end of file