type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; type NonFunctionProperties = Pick>; interface Service { id: string; name: string; description?: string; createdAt: Date; start(): void; stop(): Promise; getData(): { value: number }; } // Example Usage: type ServiceData = NonFunctionProperties; const serviceInstance: Service = { id: "svc-123", name: "Telemetry Service", createdAt: new Date(), start: () => console.log("Starting"), stop: async () => console.log("Stopping"), getData: () => ({ value: 42 }), }; const dataOnly: ServiceData = { id: serviceInstance.id, name: serviceInstance.name, createdAt: serviceInstance.createdAt, // start, stop, getData are excluded }; // This would cause a type error: // const invalidDataOnly: ServiceData = { ...serviceInstance };