我需要获取接口(interface)的属性以确保它们与实现它的对象相匹配。用于单元测试目的。
因此,如果对接口(interface)进行了更改,如果未使用新成员进行更新,则单元测试应该会中断。
我试过使用 ts-transformer-keys 包,但它会抛出一个关于不是函数的错误。
interface Test {
mem1: boolean,
mem2: string
}
我想做这样的事情:
console.log(Object.keys(Test))
期待
['mem1', 'mem2'];
最佳答案
接口(interface)在运行时不存在,因此不可能在运行时从接口(interface)中提取任何信息。您可以创建一个具有界面所有键的对象。编译器将强制您指定所有键并检查是否存在额外的键,因此复制永远不会与界面不同步:
interface Test {
mem1: boolean,
mem2?: string
}
function interfaceKeys<T>(keys: Record<keyof T, 1>) {
return Object.keys(keys) as Array<keyof T>
}
console.log(interfaceKeys<Test>({
mem1: 1,
mem2: 1
}))
console.log(interfaceKeys<Test>({ // error
mem1: 1,
}))
console.log(interfaceKeys<Test>({
mem1: 1,
mem2: 1,
mem3: 1, // error
}))
关于angular - 如何使用 TypeScript 提取接口(interface)的属性(最好没有第 3 方库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57768494/