【发布时间】:2019-09-30 23:01:52
【问题描述】:
假设我有一些接口:
export interface MyDocument {
id: string,
collection: string[];
}
然后我创建一个新的(将现有的转换为该类型):
const workingDocument = <MyDocument>document;
最后,我有这个 if 语句块来检查它是否真的包含我在该接口中指定的所有内容:
if (!workingDocument.id) {
throw new Error("Document missing `id`");
} else if (!workingDocument.collection) {
throw new Error("Document missing `collection` array");
}
但是我似乎不喜欢这样,因为 if 语句可能会永远增长并且不太好维护。
有没有更好的办法?
谢谢。
【问题讨论】:
-
我看到的 typescript 最严重的滥用是在构造函数中带有 this 的类:
constructor(data: any) { Object.assign(this,data); }- 瞧 - 根据编译器,你传递给这个类的任何东西都会自动遵守该类的任何属性。 ...运行时是另一回事。 Typescript 应该在编译时发现潜在的问题,使用它来发挥它的优势。 如果你正在投射并且你不确定你在投射什么,并且最终写了 ifs 来检查,那么你做错了打字稿。 -
如果接口上声明的所有属性都没有在它的具体类中定义,那么理想情况下打字稿转译器会抛出一个错误来做同样的事情。理想情况下,您不应使用 if..else 语句检查值是否存在。
标签: javascript typescript interface