【发布时间】:2019-12-12 23:03:16
【问题描述】:
鉴于此代码,我预计 TypeScript 编译器会失败:
function test(f: string) {
console.log(typeof f);
}
const foo: any = ["Test"];
test(foo);
const boo = "test";
test(boo);
输出是:
object
string
因为我不是 TypeScript 专家,所以我犹豫要不要在 GitHub 上写一个错误。大家怎么看?
【问题讨论】:
-
any的重点是在需要时禁用 TypeScript 的类型检查。据我所知,按预期工作。 -
你认为它会在哪里失败?在
test(foo);?但是您已将foo注释为any,这会故意关闭类型检查。您通常不应该在任何需要类型安全的地方使用any。 -
我明白了,谢谢!那么作为 API 的设计者,
function test(f: string)并不能真正保证f是string类型。 IMO,这不是很好,但这也是客观的。 -
如果 API 需要绝对 100% 保证它是一个字符串,那么检查
typeof并在失败或类似的情况下抛出错误。否则,开发人员应该知道使用any会使他们面临发生此类事情的风险。我所知道的所有语言都有不安全的“使用风险自负”的特性,TypeScript 也不例外。 -
再一次,这就是重点。不要使用
any,除非您想要忽略类型注释。如果您可以解开安全带,那么在车上系安全带有什么意义?
标签: typescript