打字稿检查字符串是否作为接口键存在

时间:2020-10-27 23:49:16

标签: typescript interface

我可以检查字符串是否作为接口密钥

public class OldPerson {
    public string Name { get; set; }

    public DateTime DateOfBirth {get; set; }
}

public class NewPerson {
    public string Name { get; set; }

    public DateTime DateOfBirth { get; set; }

    public string Height { get; set; }

    public string Weight { get; set; }

    ...some other fields
}

如何检查myNumber值是否为接口键

2 个答案:

答案 0 :(得分:0)

要执行此操作,您将需要一些可以在运行时获取接口键的东西。 interface在运行时不存在-纯粹是TypeScript构造,因此在发出的代码中不存在。

创建一个包含键的数组,将其声明为as const,这样它就不会自动进行类型扩展,然后便可以将其转换为List类型。然后,您将拥有可以使用.includes检查的类型和运行时数组:

const listKeys = ['one', 'two'] as const;
type List = Record<typeof listKeys[number], string>;

// ...

const obj = {
    one: 'one',
    two: 'two',
    three: 'three'
};
// Transformation to string[] needed because of an odd design decision:
// https://github.com/Microsoft/TypeScript/issues/26255
const newObj = Object.fromEntries(
    Object.entries(obj).filter(
        ([key]) => (listKeys as unknown as string[]).includes(key)
    )
);

Playground link

答案 1 :(得分:0)

Typescript的类型不是值。

因此,无法执行Javascript。

但是,在示例中,可以设置类型,以便myNumber是与键对应的类型。

interface list {
    one: string
    two: string
}

const myNumber: keyof list = "one"; // myNumber allow only "one" or "two";