I am new to typescript and I am using next auth to build a project I faced this and I do not know why this is happening I checked the next auth files and wrote this question this is not a typescript question since I tried it in a normal ts file and it was working as expected. I am just curious and want an answer to this
I have this config that is working but it should not
import nextAuth from "next-auth/next";
import { AuthOptions } from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
export const authOptions: AuthOptions = {
providers: [
CredentialsProvider({
credentials: {
email: {},
password: {},
},
async authorize(credentials) {
const user = { id: "hello", name: "jay", password: "dave" };
if (!user || !user.password) return null;
const passwordsMatch = user.password === credentials?.password;
if (passwordsMatch) return user;
return null;
},
}),
],
};
export default nextAuth(authOptions);
this is how credentials config interface is defined
export interface CredentialsConfig<
C extends Record<string, CredentialInput> = Record<string, CredentialInput>
> extends CommonProviderOptions {
type: "credentials"
credentials: C
authorize: (
credentials: Record<keyof C, string> | undefined,
req: Pick<RequestInternal, "body" | "query" | "headers" | "method">
) => Awaitable<User | null>
}
as you can see it returns awaitable user and user is defined like this
export interface DefaultUser {
id: string
name?: string | null
email?: string | null
image?: string | null
}
/**
* The shape of the returned object in the OAuth providers' `profile` callback,
* available in the `jwt` and `session` callbacks,
* or the second parameter of the `session` callback, when using a database.
*
* [`signIn` callback](https://next-auth.js.org/configuration/callbacks#sign-in-callback) |
* [`session` callback](https://next-auth.js.org/configuration/callbacks#jwt-callback) |
* [`jwt` callback](https://next-auth.js.org/configuration/callbacks#jwt-callback) |
* [`profile` OAuth provider callback](https://next-auth.js.org/configuration/providers#using-a-custom-provider)
*/
export interface User extends DefaultUser {}
awaitable is like this
export type Awaitable<T> = T | PromiseLike<T>;
as you can see password is not part of User in the interface then why is it working