Missing TypeScript response type for files.uploadV2
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 66/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Stack tecnológico
- typescript
- Área
- api
Línea de trabajo
Comienza en methods.d.ts comparando la declaración de files.uploadV2 con la tipificación existente de files.upload y FilesUploadResponse. Define y conecta la forma de respuesta específica descrita en el issue y, después, verifica que el acceso a result.files y a los ids de archivo anidados se compruebe correctamente sin el workaround.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
The files.uploadV2 method returns WebAPICallResult instead of a specific response type like other file methods have. This causes TypeScript errors when accessing the files property from the response.
Current behavior
// In methods.d.ts
uploadV2: MethodWithRequiredArgument<FilesUploadV2Arguments, WebAPICallResult>;
// Usage causes TS error
const result = await client.files.uploadV2({ file: buffer, filename });
const fileId = result.files[0].files[0].id;
// Error: Property 'files' does not exist on type 'WebAPICallResult'. (ts 2339)
Expected behavior
A specific response type should be defined, similar to other methods:
// Expected in methods.d.ts
uploadV2: MethodWithRequiredArgument<FilesUploadV2Arguments, FilesUploadV2Response>;
Actual API response structure
The actual response from files.uploadV2 has this structure:
{
"ok": true,
"files": [
{
"ok": true,
"files": [
{
"id": "F0A68QU0H08",
"created": 1766578264,
"timestamp": 1766578264,
"name": "filename.jpg",
"title": "filename.jpg",
"mimetype": "",
"filetype": "",
"user": "U0A57PBUCR1",
"size": 266967,
"mode": "hosted",
"is_external": false,
"is_public": false,
"url_private": "https://files.slack.com/...",
"url_private_download": "https://files.slack.com/.../download/...",
"permalink": "https://....slack.com/files/...",
"permalink_public": "https://slack-files.com/...",
"file_access": "visible"
}
],
"response_metadata": {
"scopes": ["files:write", "..."],
"acceptedScopes": ["files:write"]
}
}
]
}
Suggested type definition
export interface FilesUploadV2Response extends WebAPICallResult {
files: Array<{
ok: boolean;
files: Array<{
id: string;
created: number;
timestamp: number;
name: string;
title: string;
mimetype: string;
filetype: string;
user: string;
user_team: string;
size: number;
mode: string;
is_external: boolean;
is_public: boolean;
url_private: string;
url_private_download: string;
permalink: string;
permalink_public: string;
file_access: string;
// ... other optional fields
}>;
response_metadata?: {
scopes: string[];
acceptedScopes: string[];
};
}>;
}
Workaround
Currently using inline type cast:
const result =
/** @type {{ ok: boolean, files: Array<{ ok: boolean, files: Array<{ id: string }> }> }} */
(await client.files.uploadV2({ file: buffer, filename }));
Environment
@slack/web-apiversion: 7.13.0- Node.js version: 22.x
- TypeScript version: 5.x (via tsserver/JSDoc)
Related
The deprecated files.upload method has proper typing with FilesUploadResponse, but its replacement uploadV2 uses the generic WebAPICallResult.
Packages:
Select all that apply:
-
@slack/web-api -
@slack/rtm-api -
@slack/webhooks -
@slack/oauth -
@slack/socket-mode -
@slack/types - I don't know
Requirements
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.
- Lenguaje dominante
- TypeScript
- Estrellas
- 3.4k
- Forks
- 691
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 19
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de slackapi/node-slack-sdk
-
ThreadBroadcastMessageEvent is missing `bot_id`Posiblemente ocupada @sean0407 la tomó hace 10 días. Abiertountriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
slackapi/node-slack-sdk#2766 ·
Los mantenedores suelen responder en 1 día
-
SocketModeClient crashes on Events API payloads without an inner eventPosiblemente ocupada @kyungyeon-byun-imweb-me la tomó hace 23 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
slackapi/node-slack-sdk#2753 ·
Los mantenedores suelen responder en 1 día
-
Support assistant.search.* APIsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoauto-triage-skip enhancement pkg:web-api
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
slackapi/node-slack-sdk#2607 · 2 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
`SlackListsItem FieldMessage.message` type does not match API response shapePosiblemente ocupada @AjTheSpidey la tomó hace 161 días. Abiertoarea:typescript auto-triage-skip bug pkg:web-api
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
slackapi/node-slack-sdk#2598 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 75/100
slackapi/node-slack-sdk#2791 ·
Los mantenedores suelen responder en 1 día
Todos los issues de slackapi/node-slack-sdk
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
braintrustdata/braintrust-sdk-javascript#2659 ·
Los mantenedores suelen responder en 1 día
-
body-parser 2.3.0 in the published ai-dial-chat-bff image is vulnerable (CVE-2026-111181, HIGH)Posiblemente ocupada @illya-havsiyevych la tomó hoy. Abiertobug
Dificultad 1/5 1-3 horas Aptitud para principiantes 87/100
epam/ai-dial-chat#9566 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
はさみアイコンを修正するAbiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
-
resource.reload() while params is in error switches the resource to 'idle' instead of retryingAbiertoarea: core
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día