我可以从对象的函数参数继承类型吗?

时间:2018-02-23 11:42:52

标签: javascript angular typescript

我在Angular中使用TypeScript。之前我用硬编码设置了函数参数类型,如下所示:

login(email: string) {}

现在我尝试使用来自其他对象的继承并按照这样做

import { User } from './user.model';

login(email: User['email']) {}

一切正常,但我在TypeScript食谱中找不到这样的例子,不确定,我应该设置这样的类型。 我可以使用上面的构造以及TypeScript指南对它的看法吗?

1 个答案:

答案 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),因为它更具可读性,但这是一个偏好问题