xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

TypeScript type assertion All In One

TypeScript type assertion All In One


// let test: any = '';
// test.name;
// test();
// test.length;

// let test: unknown = '';
// test.name;
// Object is of type 'unknown'.(2571)
// test();
// Object is of type 'unknown'.(2571)
// test.length;
// Object is of type 'unknown'.(2571)


console.log('test =', test);

type assertion

// type assertion
let test: unknown = '';
// (test as object).name;
// Property 'name' does not exist on type 'object'.ts(2339)
// (test as Object).name;
// Property 'name' does not exist on type 'Object'.(2339)
(test as any).name;

// (test as Function)();
// (test as Array<number>).length;
// (test as string).length;

console.log('test =', test);

https://www.typescriptlang.org/play


function nameChecker(obj: object): obj is { name: string } {
  return !!obj && typeof obj === "object" && "name" in obj;
}

/*

function nameChecker(obj: object): obj is { name: string } {
  return !!obj && typeof obj === "object" && name in obj;
}

const name: void
@deprecated

'name' is deprecated.ts(6385)
lib.dom.d.ts(17177, 5): The declaration was marked as deprecated here.
The left-hand side of an 'in' expression must be a private identifier or of type 'any', 'string', 'number', or 'symbol'.ts(2360)
*/

const obj = {};

if (nameChecker(obj)) {
  console.log('name', obj.name);
}


refs

https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions

https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions

https://www.tutorialsteacher.com/typescript/type-assertion



©xgqfrms 2012-2020

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2022-02-05 00:19  xgqfrms  阅读(94)  评论(3编辑  收藏  举报