2016-03-21 57 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

是的,我知道這一點;-)其實我的問題是:如果我忘記了這一點,如何看到編譯錯誤... –