如何在不初始化任何值的情况下断言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查询生成类型。当我查询...
[如果您有两个运行时对象并将它们进行相等性比较(请注意,在大多数情况下,检查typeof user1 === typeof user2
和user1 === user2
并不等同于检查相等性),它不会告诉您TypeScript是否认为它们是相等的。相同的类型。例如: