编译器配置项-compilerOptions
类型检查相关配置项(三)
禁止隐式的any
-noImplicitAny
在一些没有显式注释类型的情况下,并且TypeScriprt无法推导出具体类型时,将会把变量推导为any
类型,这样会导致一些错误被遗漏,例如:
function fn(s) {
// No error?
console.log(s.subtr(3));
}
fn(42);
当noImplicitAny
开启的时候,每当TypeScript推导出any类型时,都会报告错误出来:
function fn(s) {
Parameter 's' implicitly has an 'any' type.
console.log(s.subtr(3));
}
禁止隐式的重载方法-noImplicitOverride
当在使用类的继承功能时,有时会出现子类与基类“不同步”(我理解为基类、子类的定义不一致)的情况,例如子类中重新定义了基类中已经存在的函数。
例如,给音乐专辑同步系统建模:
class Album {
download() {
// Default behavior
}
}
class SharedAlbum extends Album {
download() {
// Override to get info from many sources
}
}
然后,专辑需要支持生成播放列表的功能,对Album
类进行重构,添加一个setup
函数替换之前的download
:
class Album {
setup() {
// Default behavior
}
}
class MLAlbum extends Album {
setup() {
// Override to get info from algorithm
}
}
class SharedAlbum extends Album {
download() {
// Override to get info from many sources
}
}
这种情况下,TypeScript不会提供SharedAlbum
类的download
会覆盖基类的警告。
使用noImplicitOverride
选项可以保证子类的重载函数不会缺失 override
,从而保证子类与基类的“同步”。
下边的示例中已经启用noImplicitOverride
选项,当子类中的重载方法缺失override
修饰符时得到错误提示:
class Album {
setup() {}
}
class MLAlbum extends Album {
override setup() {}
}
class SharedAlbum extends Album {
setup() {}
// This member must have an 'override' modifier because it overrides a member in the base class 'Album'.
}
禁止隐式的return
语句-noImplicitReturns
启用noImplicitReturns
选项后,TypeScript 将检查函数中的所有代码路径以确保它们返回值。
function lookupHeadphonesManufacturer(color: "blue" | "black"): string {
// Function lacks ending return statement and return type does not include 'undefined'.
if (color === "blue") {
return "beats";
} else {
("bose");
}
}
网友评论