我仍在使用打字稿调整编码。我是一名全栈开发人员,使用 C#(一种 OOP 语言)。我真的不喜欢动态类型语言,幸运的是我还不需要使用任何动态类型语言。
我刚刚意识到“任何”铸造有多糟糕,特别是对于初学者和不使用 OOP 的人。我的意思是,通用方法可以返回任何值 - 至少我可以处理它 - 例如使用 axios、rxjs 或从本地存储检索数据,因为它们的类型确实会有所不同。
但是真正让我烦恼的是这是非法的:
class C1 {id: string}
class C2 {num: number}
const c1 = new C1()
const c2: C2 = c1;
但这对于打字稿来说是完全可以的:
class C1 {/*...*/}
class C2 {/*...*/}
const c1 = new C1();
const c2: C2 = c1 as any;
我目前正在开发的应用程序有很多这样的铸件,通常当我重构任何东西时,这会导致很多麻烦,产生错误等。
这完全是无稽之谈,就像“哦,一个错误?让我投射“任何”。有效😍”然后轰隆隆!炸弹已安放
有人可以向我解释一下这种可能性是否有任何实际用途吗?
我实际上同意 OOP,即当我们创建泛型方法时,我们必须在声明函数或方法时设置一个类型 - 我知道,在 C# 中存在对象类型,但这确实很少见,强烈不推荐使用 - ,并且 TS 具有完全相同的功能:
// C# E.g.:
public T GenericMethod<T>() {
//...
}
var c1 = GenericMethod<C1>();
// TS E.g.:
genericMethod<T>() {}
// or even
genericMethod = <T>() => ({} as T);
这个标准对于从 DB Contexts、localStorage、axios 等获取数据确实很有帮助,并且更容易处理可能的异常
我刚刚意识到“任何”选角有多糟糕
我就在你身边。我得到了“任何警察”的绰号,因为我基本上从不让任何人通过代码审查。
any
的存在有一个特定的目的:使打字稿的采用更容易。特别是在早期,代码库从 javascript 开始然后逐段转换为 typescript 是很常见的。 any
是普通 JavaScript 变量所具有的类型,TypeScript 不会对它们执行类型检查,除非它可以推断类型。目的是代码库将从许多 any
开始,并随着时间的推移用真实类型替换它们。
一旦代码库完全或主要采用打字稿,
any
就会阻碍它。他们(按照设计)取消了类型检查,因此他们会让错误溜走。在极少数情况下,它们可以用于告诉打字稿“相信我,我知道我在做什么,所以不要在这里检查我”,但应该避免使用它们。不幸的是,看起来您继承的代码库没有 The Any Police 来对其进行检查。