【问题标题】:Get keys from interface in a generic function从通用函数中的接口获取键
【发布时间】:2021-02-13 16:38:41
【问题描述】:

我需要通过执行以下操作从接口获取类型,但我需要在函数内部进行。有没有办法使用 typescript 泛型来做到这一点?

我需要传递请求正文的函数,以及指定其类型的接口,并验证请求正文是否具有必要的项目以及正确的格式。

注意:我将 tsoa 与 express 一起使用,因此任何其他正确验证请求正文的库或技术都可以。

interface someInterface {
    foo: string;
    bar: number;
}

const testObject: someInterface = req.body;

verifyObject(testObject);
/*
ensure foo and bar are of correct type, length etc.
(I will verify types, I just need a way of
getting the interface keys in a reusable function.)
*/

function verifyObject<T>(obj: T): void {
    class temp implements T {} // does not work
    const keys = Object.keys(new temp());
    // use keys
}

【问题讨论】:

    标签: node.js typescript express tsoa


    【解决方案1】:

    你几乎拥有它 - 制作了一个通用函数,所以它的参数将是接口的对象,并且访问对象的键是,嗯,你知道的:

    function verifyObject<T>(obj: T): void {
      const keys = Object.keys(obj);
    }
    
    verifyObject<someInterface>(someObj);
    

    【讨论】:

    • 但如果someObj 在界面中只有5 个属性中的2 个,则使用Object.keys 只会检索这两个属性。如何获取所有属性,以便检查someObj 是否包含它们。
    • 在您的示例中,Interface 有两个属性,并且都不是可选的,所以我的答案是基于此
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多