我有一个返回base64编码值的函数,类似于:
token = (unencoded:string):string => {
return Buffer.from(unencoded).toString('base64')
}
我想返回一个类型,表明内容是base64编码的。我可以通过将字符串分配给新类型来伪造它:
type Base64 = string
token = (unencoded:string):Base64 => {
return Buffer.from(unencoded).toString('base64')
}
这样做的缺点是Base64在打字比较中等于字符串,所以它只有糖才好。我想知道是否有办法更深入地断言字符串本身的事情?
答案 0 :(得分:0)
您可以伪造它:
type Encoding<A> = A;
type Base64 = string & Encoding<'base64'>;
const toBase64 = (v: string): Base64 =>
((Buffer.from(v).toString('base64'): any): Base64);
function test(aB64String: Base64): void {
console.log(aB64String);
}
let v = 'blah';
test(v);
// ^ Cannot call `test` with `v` bound to `aB64String` because string [1] is incompatible with string literal `base64` [2]
test(toBase64(v));
// ^ OK √
这样,每次使用Base64
类型时,都需要通过toBase64
函数传递字符串值以获取实际的Base64
类型的值。