考虑到以下代码,我希望TypeScript编译器会失败:
function test(f: string) {
console.log(typeof f);
}
const foo: any = ["Test"];
test(foo);
const boo = "test";
test(boo);产出如下:
object
string我不太愿意在GitHub上写一个bug,因为我不是TypeScript专家。大家怎么看?
操场连接
发布于 2019-12-13 01:39:14
类型的目的是选择不对代码的某些部分进行类型检查。它故意不健全;所有类型都可以分配给any,而any可以分配给所有类型(never除外)。这既有用又危险。很有用,因为在某些时候,正确地键入一段有效的真实世界代码是乏味的、困难的或不可能的,而any则是一个转义舱口。因为编译器无法区分使用any键入的有效代码和用any键入的无效代码之间的区别,所以很危险。因此,对any的建议通常是“谨慎使用它”。
如果您发现这样的建议不够,因为您不信任他人或您自己不编写类似于上面的test(foo)这样的代码,那么在完全放弃TypeScript之前,您至少可以探索一个选项:去皮。
TSLint和TypeScript ESLint都可以配置为不允许将值注释为any类型。TSLint的规则称为no-any,TypeScript的规则称为no-explicit-any。这将导致您得到一个错误,如下所示:
// TSLint
const foo: any = ["Test"];
// -----> ~~~~
// ERROR: no-any Type declaration of 'any' loses type-safety.
// Consider replacing it with a more precise type.或者有可能
// TypeScript ESLint
const foo: any = ["Test"];
// -----> ~~~~
// warning Unexpected any. Specify a different type
// @typescript-eslint/no-explicit-any好吧,希望这能帮上忙,祝你好运!
https://stackoverflow.com/questions/59313928
复制相似问题