尝试 as 断言
// 定义一个类型
type a = 'get'
// 定义一个函数, 参数类型为 'get'
function f(a: a) {
console.log(a)
}
f('a') // 可以执行
const obj = {
a: 'get'
}
f(obj.a) // 类型“string”的参数不能赋给类型“"get"”的参数。 这里的 obj 属性的值类型为 string 不符合期望类型 'get'
通常情况下, 一个对象的属性值都是基本类型和引用类型数据, 不太可能会出现 ‘get’, ‘post’, 这些个自己定义的字符串文字类型;这个时候可以使用断言了f(obj.a as 'get')
把 obj.a 的属性值 定义为 get
类型, as 在这里把 string 类型 转换为了 get 类型
as const
You can use as const to convert the entire object to be type literals:
const req = { url: 'https://example.com', method: 'GET' } as const
相当于把这个对象转换为type reqTranlate = { url: 'https://example.com' method: 'GET' }
但是 reqTranlate 在 ts 里面是无法访问其属性值的, 因为它是类型, 不是一个值, 而 const 就是把对象转换为一个可以访问其属性值的type
或者这种方式更方便理解一些, 它的值和类型是一样的
{key:value:type}
{ url: 'https://example.com':'https://example.com', method: 'GET' : 'GET'}
// 在这里如果不使用 as const 断言, 下面会提示类型错误
const req = { url: 'https://example.com', method: 'GET' } as const
type reqTranlate = {
url: 'https://example.com'
method: 'GET'
}
function f4(params: reqTranlate): void {}
f4(req)