append()中的“…”符号不适用于追加不同类型的切片

I need an abstracted slice that contains multiple types. The most simplified code is this:

package main

import "fmt"

type A interface{}

type X string

func main() {
    sliceA := make([]A, 0, 0)
    sliceX := []X{"x1", "x2"}
    var appendedSlice []A
    appendedSlice = append(sliceA, sliceX[0], sliceX[1])  // (1) works
    appendedSlice = append(sliceA, sliceX...)             // (2) doesn't work
    fmt.Println(appendedSlice)

}

In my real program, the interface A defines some functions, and X and also other types implement it.

Line (2) raises an error cannot use sliceX (type []X) as type []A in append.

I thought (2) is a syntax sugar for (1), but I'm probably missing something... Do I have to always add an element X into slice A one by one?

Thank you guys in advance!

The problem is that interface{} and string are two different types. To convert a slice from string to interface{} you will have to do it in one of the following ways:

create sliceA and initialize its size to sliceX length

sliceA := make([]A, len(sliceX))
for ix, item := range sliceX {
    sliceA[ix] = item
}

dynamically append sliceX items to appendedSlice

var appendedSlice []A
for ix := range sliceX {
    appendedSlice = append(appendedSlice, sliceX[ix])
}

Please read more here Convert []string to []interface{}