如何在不初始化变量的情况下断言接口相等?

问题描述 投票:0回答:1

如何在不初始化任何值的情况下断言2个接口是相同的(鸭式键入?)>

我使用graphql代码生成工具自动为graphql查询生成类型。当我从不同地方查询相同的数据时,会得到相同的接口。我想通过在所有文件中导入相同的接口来合并我的输入,同时确保确实接口的不同声明是相同的。

示例:

// src/components/__generated__/MyData.ts
export interface MyData_me {
  __typename: "User";
  id: string;
  name: string | null;
  avatarUrl: string | null;
  email: string | null;
}
// src/models/__generated__/UserData.ts
export interface UserData {
  __typename: "User";
  id: string;
  name: string | null;
  avatarUrl: string | null;
  email: string | null;
}
// src/models/User.ts
import { gql } from "@apollo/client";

import {MyData, MyData_me} from "../components/__generated__/MyData";
import {UserData} from "./__generated__/UserData";

export const UserDataFragment = gql`
  fragment UserData on User {
    id
    name
    avatarUrl
    email
  }
`

if (UserData !== MyData_me) { // [tsserver 2693] [E] 'UserData' only refers to a type, but is being used as a value here
  throw "We have a problem, interfaces TUser and MyData_me aren't identical!"
}
export type TUser = UserData;
export type TMe = MyData; 

这里有干净的解决方案吗?为了测试if (typeof user1 !== typeof user2),被迫用伪数据初始化2个对象听起来是错误的,因为它与我的应用程序逻辑无关。

我如何在不初始化任何值的情况下断言2个接口是相同的(鸭型)?我使用graphql代码生成工具自动为graphql查询生成类型。当我查询...

typescript interface equality
1个回答
0
投票

[如果您有两个运行时对象并将它们进行相等性比较(请注意,在大多数情况下,检查typeof user1 === typeof user2user1 === user2并不等同于检查相等性),它不会告诉您TypeScript是否认为它们是相等的。相同的类型。例如:

© www.soinside.com 2019 - 2024. All rights reserved.