首页 > 解决方案 > 类型“字符串”不可分配给类型“A”

问题描述

我有以下无法编译的代码片段:

interface A {
    a: string
}

export type SessionSsrProps<T> = Record<string, T> & {
    signOutUrl: string
}

const x: SessionSsrProps<A> = {
    x: {
        a: "Hello"
    },
    signOutUrl: "Hello"
}

编译器抱怨:

Type 'string' is not assignable to type 'A'

我究竟做错了什么?

我也试过:


interface SessionSsrProps<T> {
    [key:string]: T
    signOutUrl: string
}

编译器抱怨:

Property 'signOutUrl' of type 'string' is not assignable to string index type 'T'.

标签: typescripttypes

解决方案


我不能自信地说你正在做的事情是否可能,但很可能不是。

您的两次尝试都失败了,因为您描述了一种不可能的类型:一条记录​​有零个或多个键,其值都是 type T,并且还有一个键signOutUrl的值是 type string。这需要signOutUrl同时满足两者string & T,这是无法解决的,因为T它不扩展string

您要表达的是具有零个或多个键的记录,其值都是 type T除了signOutUrl具有 type 值的键string。我相信(但不确定)这目前在 TypeScript 中无法表达。


推荐阅读