видимо что-то типа такого нужно сделать https://www.typescriptlang.org/play?#code/C4TwDgpgBAwgrgZ2AewLYB4AqUIA9gQB2AJglMgEYBWEAxsAHxQC8U2eBJZlN9UA-Gxz4ipKAEEATpICGIdDMIgmgwhABuESVABcQvWs2SA3AFgAUBdrJCSKDL3wkadACU6yScXRJJAS0IAcwAaKF8AwIYmVgBtAF0zc2tbYCgKR0QUDABvGIBrCBA9cKC44uB-IIBfaKh4xKA
Я у себя использую такую конструкцию. Не идеально, но для некоторых юз-кейсов хватает. Пример использования — на скрине. export type Primitive = | string | number | boolean | bigint | symbol | null | undefined; export type PlainObject = { [key: string]: Primitive | Array<unknown> | PlainObject; }; export const isPlainObject = (val: unknown): val is PlainObject => ({}.toString.call(val) === '[object Object]' && ((val as any).constructor === Object || (val as any).constructor === undefined));
Обсуждают сегодня