2016-03-21 56 views
0

我希望我的TypeScript应用程序的编译失败,如果我没有与我使用的外部库对应的类型(TypeScript文件中已安装和引用)。目前,编译在没有它们的情况下是成功的。没有d.ts文件没有编译错误

这里是我的tsconfig.json内容:

{ 
    "compilerOptions": { 
    "target": "ES5", 
    "module": "system", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "noEmitOnError": false, 
    "declaration": true 
    } 
} 

这里是我想抛出错误的代码(toastr变量没有定义,只有在运行时提供):

import {Component} from 'angular2/core'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div>Hello world</div> 
    ` 
}) 
export class AppComponent { 
    constructor() { 
    toastr.info('I am here for few seconds'); 
    } 
} 

谢谢!

+2

我不认为有一个简单的方法来做到这一点。 Typescript被写为JavaScript的超集,所以所有有效的JavaScript都是有效的Typescript。有效的JavaScript可以是无类型的,所以有效的Typescript可以是无类型的。 Typescript编译器可以内置它,但我不知道任何这样的功能。你可以尝试一个功能请求https://github.com/Microsoft/TypeScript/issues – AndyJ

+1

Toastr在树中某个文件中的引用?这并不适合我,所以有些事情必定会有所不同。 – Fenton

+0

你有没有理由不使用toastr类型? – rgvassar

回答

2

默认情况下,即使出现错误,TypeScript也会发出JavaScript。 This is a feature. See Why TypeScript

这就是说你已经在你的tsconfig "noEmitOnError": false,。如果将其更改为true,那么如果出现任何错误,则不会发射。请注意,这可能会降低增量编译性能,因为编译器需要执行整个程序分析,甚至在单个文件上发出。

+0

感谢您的回答!我问这个问题是因为Angular2的构建允许这样做。我的意思是当出现错误时,编译失败,我很好奇如何在打字稿配置文件中对其进行配置... –

+0

请参阅https://github.com/angular/angular/blob/master/tools/broccoli/trees /browser_tree.ts#L169 –

+0

我想这是因为他们不使用相同的编译器;-) –

2

让编译器闭嘴的一个快速方法是声明toastr变量。

declare toastr: any; 
+0

是的,我知道这一点;-)其实我的问题是:如果我忘记了这一点,如何看到编译错误... –