Supabase RPC Typescript 类型可为空

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

我创建了一个 Supabase RPC 函数,但我在生成的打字稿定义方面遇到了问题:

npx supabase gen types

下面是生成的类型,我想让

current_status
可以为空,因为它有时可能会丢失:

get_bananas: {
  Args: {
    _limit?: number;
    _offset?: number;
  };
  Returns: {
    id: string;
    text: string;
    current_status: Database['public']['Enums']['status_type_enum'];
    // current_status: null | Database['public']['Enums']['status_type_enum'];
  }[];
};

这是我的 RPC 函数:

CREATE TYPE status_type_enum AS ENUM ('rotten', 'ripe'); 

CREATE FUNCTION get_bananas(
  _limit INT DEFAULT NULL,
  _offset INT DEFAULT 0
)
RETURNS TABLE (
  id UUID,
  text TEXT,
  current_status status_type_enum
)
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN QUERY
  SELECT
    b.id,
    b.text,
    s.status_type AS current_status
  FROM bananas b
  LEFT JOIN statuses s ON b.id = s.banana_id AND s.user_id = auth.uid()
  LIMIT _limit
  OFFSET _offset;
END;
$$;
typescript function rpc nullable supabase
1个回答
0
投票

如果返回的函数列类型可以为空,则生成的打字稿类型应该可以为空。您可以让您的函数使用

[table].[column]%TYPE
符号继承表列类型,如下所示:

CREATE FUNCTION get_bananas(
  _limit INT DEFAULT NULL,
  _offset INT DEFAULT 0
)
RETURNS TABLE (
  id bananas.id%TYPE,
  text bananas.text%TYPE,
  current_status statuses.status_type%TYPE
)
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN QUERY
  SELECT
    b.id,
    b.text,
    s.status_type AS current_status
  FROM bananas b
  LEFT JOIN statuses s ON b.id = s.banana_id AND s.user_id = auth.uid()
  LIMIT _limit
  OFFSET _offset;
END;
$$;

更新函数定义后,再次运行类型生成。

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