improve types

This commit is contained in:
syuilo
2021-05-28 09:34:42 +09:00
parent 466c083233
commit db3724cf33
4 changed files with 19 additions and 15 deletions

View File

@ -5,6 +5,8 @@ import { ApiError } from './error';
import { SchemaType } from '@/misc/schema';
import { AccessToken } from '../../models/entities/access-token';
type NonOptional<T> = T extends undefined ? never : T;
type SimpleUserInfo = {
id: ILocalUser['id'];
host: ILocalUser['host'];
@ -17,11 +19,12 @@ type SimpleUserInfo = {
isSilenced: ILocalUser['isSilenced'];
};
// TODO: defaultが設定されている場合はその型も考慮する
type Params<T extends IEndpointMeta> = {
[P in keyof T['params']]: NonNullable<T['params']>[P]['transform'] extends Function
? ReturnType<NonNullable<T['params']>[P]['transform']>
: ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0];
: NonNullable<T['params']>[P]['default'] extends null | number | string
? NonOptional<ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0]>
: ReturnType<NonNullable<T['params']>[P]['validator']['get']>[0];
};
export type Response = Record<string, any> | void;

View File

@ -6,6 +6,7 @@ import { DriveFiles, GalleryPosts } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { GalleryPost } from '../../../../../models/entities/gallery-post';
import { ApiError } from '../../../error';
import { DriveFile } from '@/models/entities/drive-file';
export const meta = {
tags: ['gallery'],
@ -55,7 +56,7 @@ export default define(meta, async (ps, user) => {
id: fileId,
userId: user.id
})
))).filter(file => file != null);
))).filter((file): file is DriveFile => file != null);
if (files.length === 0) {
throw new Error();

View File

@ -5,6 +5,7 @@ import { ID } from '../../../../../misc/cafy-id';
import { DriveFiles, GalleryPosts } from '../../../../../models';
import { GalleryPost } from '../../../../../models/entities/gallery-post';
import { ApiError } from '../../../error';
import { DriveFile } from '@/models/entities/drive-file';
export const meta = {
tags: ['gallery'],
@ -58,7 +59,7 @@ export default define(meta, async (ps, user) => {
id: fileId,
userId: user.id
})
))).filter(file => file != null);
))).filter((file): file is DriveFile => file != null);
if (files.length === 0) {
throw new Error();