typescript 类型,编码时的提示问题?

const class1 = <const>['a', 'b',...]
type _class1 = typeof class1[number]

function p(name: _class1 | string) {
    console.log(name)
}

如果想实现name既能提示class1的每一项,也能输入任意字符串应该怎么处理。
现在这样没有提示

阅读 1.3k
2 个回答

可以用如下的方法:

const class1 = ['a', 'b', 'c'] as const

type _class1 = typeof class1[number]

function p(name: _class1 | Omit<string, _class1>) {
  console.log(name)
}

function p1(name: _class1 | string & {}) {
  console.log(name)
}

现在name是形参,而且类型定义里有了 string 没法知道具体类型的。
class1 能有具体提示是因为 const 断言。