我有一个设置对象,并希望为如下函数提供单个键值对:
const settings = {
time1: 40 * 60 * 60,
time2: 10 * 60 * 60,
breaks: [
{ limit: 6 * 60 * 60, length: 30 * 60 },
{ limit: 9 * 60 * 60, length: 15 * 60 },
],
}
// works
function changeSetting1<T extends keyof typeof settings>(details: {key: T, value: typeof settings[T]}): void {
//
}
// doesn't work
type func_details = <T extends keyof typeof settings>{key: T, value: typeof settings[T]}
function changeSetting2(details: func_details): void {
changeSetting1({key: "time1", value: 8 * 60 * 60})
changeSetting2({key: "time1", value: 8 * 60 * 60})虽然当我直接在函数中键入它时,它似乎可以工作,但TypeScript抱怨说,当我第一次定义类型func_details时,需要有一个(。这样做的正确语法是什么?
发布于 2021-06-10 10:25:18
首先,您有一个语法错误。类型的定义应该是:
type func_details<T extends keyof typeof settings> = {key: T, value: typeof settings[T]};其次,由于函数接受带有泛型类型的参数,因此函数本身必须具有满足extends keyof typeof settings条件的泛型参数。
function changeSetting2<T extends keyof typeof settings>(details: func_details<T>): void {
// [...]
}https://stackoverflow.com/questions/67919217
复制相似问题