簡體   English   中英

如何讓 Typescript 拋出運行時錯誤?

[英]How to make Typescript throw runtime error?

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
 constructor() {
   console.log(this.getColor(1000))
}
getColor(c:String) {
  return c
}
}

我的文本編輯器在 1000 下方放了一條紅線,上面寫着:“1000”類型的參數不可分配給“字符串”類型的參數。ts(2345)

好的...但是我的應用程序仍在執行,我可以在控制台上看到結果。

有什么方法可以使 Angular 和/或 Typescript 在這種情況下防止執行?

您的瀏覽器不知道 TypeScript,它只執行轉譯的 javascript 代碼。

但是在您的情況下,構建過程(由 Angular 制作)會引發錯誤,您將無法部署您的應用程序。

在開發模式下,會出現 typescript 錯誤,但出於實際原因您仍然可以執行該應用程序

Typescript 只是警告您,有些事情是不對的。 它仍然可以編譯,您仍然可以運行代碼並且它可以工作,但它並不打算那樣工作。

那么如何檢查輸入是否正確呢?

function example (color: string): void {
  if (typeof color !== 'string') {
    throw Error() // you can put your error message in here
  }
}

您可以為--noEmitOnError 配置編譯器

如果報告了任何錯誤,請不要發出輸出。

盡管這本身不會“阻止執行”,但它會避免 Typescript 故意允許您在檢測到類型錯誤時發出的傾向。 來自 TypeScript 開發負責人 RyanCavanaughTypescript 問題 828中,其中創建了該命令行標志:

我們絕對想要編譯器在出現類型錯誤時可以發出的行為。 這是遷移現有 JavaScript 的關鍵場景——您將 some.js 文件重命名為 .ts,得到一些類型錯誤,但希望在重構它以消除類型錯誤時繼續編譯它。 從這個意義上說,它們是“警告”; 我們不能保證您的程序不能僅僅因為它有類型錯誤而工作。

也就是說,我們認識到這並不總是您想要的行為。 增量構建經常會因此而混亂。 我們需要一些東西來解決這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM