gpt4 book ai didi

typescript - 如何防止在 Typescript 中的函数调用中从 'any' 进行隐式转换

转载 作者:行者123 更新时间:2023-12-04 14:22:07 26 4
gpt4 key购买 nike

考虑以下 typescript 代码:

function eatString(str: string){
console.log(str);
}

const anyObject: any = {
junk: 3425234,
};

eatString(anyObject); // Compiles ok - by why?
eatString({something: "abc"}); // Doesn't compile - as expected

有没有办法阻止功能eatString(str: string)从服用 any参数,通过 tsconfig 或 tslint 选项还是其他方式?

我最初以为 noImplicitAny可能会有所帮助,但在尝试并查看文档后,这不是我所想的。 no-any不是我的选择,因为我仍然希望能够使用 any在某些情况下。

如果这是不可能的,是否有什么原因让我想念为什么?我已经很久没有在 typescript/javascript 中工作了,但是我已经被一些可以防止的问题所困扰了几次。

最佳答案

any根据定义可分配给任何其他类型,因此当您通过 anyObject 时到参数 str它将按照此规则兼容。

你应该避免使用 any除非绝对必要。如果您不知道应该使用的类型 unknown它与没有保护或断言的其他类型不兼容(参见 hereany 的差异)

function eatString(str: string){
console.log(str);
}

const anyObject: unknown = {
junk: 3425234,
};

eatString(anyObject); // error now

在这种特殊情况下,您应该让编译器推断 anyObject 的类型。
function eatString(str: string){
console.log(str);
}

const anyObject = { // inferred as { junk : number }
junk: 3425234,
};

eatString(anyObject); // error now

您可以使用 tslint 来禁止 any 的使用。作为类型注释(使用 this rule )但 any可能仍然从外部 API 泄​​漏。

关于typescript - 如何防止在 Typescript 中的函数调用中从 'any' 进行隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53371041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com