是否可以采用两种类型并确保它们具有相同的形状?例如:
// foo.json
{
"key1": {
"key2": "foo"
}
}
// bar.json
{
"key1": {
"key2": "bar"
}
}
// baz.json
{
"key1": {
"otherkey": ""
}
}
// main.ts
import foo from "./foo.json";
import bar from "./bar.json";
import baz from "./baz.json";
type FooType = typeof foo;
type BarType = typeof bar;
type BazType = typeof baz;
// FooType === BarType --> true
// FooType === BazType --> false
可能会做类似的事情
const f: FooType = {} as BarType;
const b: BarType = {} as FooType;
但这很丑陋,并没有真正描述正在发生的事情。
答案 0 :(得分:4)
第一件事,如果您的json文件是数据,即在编译时未知,那么您无能为力-TypeScript类型仅在编译时存在。
如果要比较两种类型,则可以这样写:
type Equal<A, B> = A extends B ? B extends A ? true : false : false;
然后在某个地方:
interface A {
s: string;
n: number;
}
interface B {
s: string;
}
const EQUAL_A_B: Equal<A, B> = true;
现在这将无法编译,错误为Type 'true' is not assignable to type 'false'.
,因为这两种类型不相等。