typescript 里面的 as const

尝试 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)

参考文档 ts文档

上一篇:基于ssm的房屋租赁系统,ssm+layui前后端分离


下一篇:处理 vue2 + vite 项目 里面的require(...+变量+...) 函数