我创建了一个 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;
$$;
如果返回的函数列类型可以为空,则生成的打字稿类型应该可以为空。您可以让您的函数使用
[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;
$$;
更新函数定义后,再次运行类型生成。