我在Angular中使用TypeScript。之前我用硬编码设置了函数参数类型,如下所示:
login(email: string) {}
现在我尝试使用来自其他对象的继承并按照这样做
import { User } from './user.model';
login(email: User['email']) {}
一切正常,但我在TypeScript食谱中找不到这样的例子,不确定,我应该设置这样的类型。 我可以使用上面的构造以及TypeScript指南对它的看法吗?
答案 0 :(得分:1)
语法T[field]
是类型查询,而不是继承。无论术语如何,它都取决于您的用例。当您不知道对象的实际类型或映射类型时,类型查询会更有用:
class Test <T extends { key: any, value : any}>{
getValue(key: T['key']) : T['value'] {
return null;
}
}
var t = new Test<{ key: number, value : string}>();
var foo = t.getValue(0) // only numbers are accepted, will foo be typed as string
这就是说,您可以在当前使用它时使用此语法。如果更改User[email]
的类型,该函数的所有用法都可能会失败,这可能是有意的。如果您不相信该字段的类型会发生变化,我会坚持使用实际类型(在这种情况下为string
),因为它更具可读性,但这是一个偏好问题