美文网首页
TSConfig文件详解06

TSConfig文件详解06

作者: 从零开始学ArchLinux | 来源:发表于2024-06-16 23:33 被阅读0次

编译器配置项-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");
  }
}

相关文章

网友评论

      本文标题:TSConfig文件详解06

      本文链接:https://www.haomeiwen.com/subject/gfgtcjtx.html