689*_*uge 0 typescript next-auth
我在下一个项目中使用 next-auth 进行授权并使用打字稿,当我将“jwt”分配给策略时,会出现类型错误警告:类型“string”不可分配给类型“SessionStrategy |” 不明确的'。
我的代码:
session: {
strategy: 'jwt',
},
Run Code Online (Sandbox Code Playgroud)
类型代码:这些类型都是官方类型,没有自己声明
export interface NextAuthOptions {
...
session?: Partial<SessionOptions>;
...
}
Run Code Online (Sandbox Code Playgroud)
type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
Run Code Online (Sandbox Code Playgroud)
export interface SessionOptions {
...
strategy: SessionStrategy;
...
}
Run Code Online (Sandbox Code Playgroud)
export declare type SessionStrategy = "jwt" | "database";
Run Code Online (Sandbox Code Playgroud)
eri*_*2k8 13
太长了;
向选项对象添加类型:
export const authOptions: NextAuthOptions = {
Run Code Online (Sandbox Code Playgroud)
解释:
想象一下你有一个函数:
type GreetOptions = {
greeting: 'hello' | 'hey'
name: string
}
const greet = ({ greeting, name }: GreetOptions) => {
console.log(`${greeting}, ${name}!`)
}
Run Code Online (Sandbox Code Playgroud)
您可以直接调用它,例如:
greet({ greeting: 'hello', name: 'Joe' })
Run Code Online (Sandbox Code Playgroud)
但是如果你将对象提取到变量中,它就会失败......
const options = { greeting: 'hello', name: 'Joe' }
// ERROR! Type 'string' is not assignable to type '"hello" | "hey"'.(2345)
greet(options)
Run Code Online (Sandbox Code Playgroud)
编译器按照执行顺序读取代码。所以它首先遇到options变量。它不会提前阅读代码来尝试弄清楚你将用它做什么,它只是推断出一个合理的类型:
const options: {
greeting: string;
name: string;
}
Run Code Online (Sandbox Code Playgroud)
然后,当您尝试将其传递给 时greet,stringfor 的类型greeting不够具体,无法匹配参数类型。但是,您可以帮助它并声明它应该是什么:
const options: GreetOptions = { greeting: 'hello', name: 'Joe' }
Run Code Online (Sandbox Code Playgroud)
现在它可以检查它并确保您不这样做:
const options: GreetOptions = { greeting: 'goodbye', name: 'Joe' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4268 次 |
| 最近记录: |