Day10:【TypeScript 学起来】只有 TS 才有的型别 : any / unknow / void / never

Q: 身为工程师,你觉得有什麽工具大大提高了工作效率?
A: 单身

看文章的人表示: 看个文章也中枪 XDDD (孤独万岁 单身无罪~

好 终於来讲 TypeScript 才有的型别了, 今天会提到的有:any / unknow / void / never。


any

如果你不希望某些值出现型别检查错误,可以使用any,他是用来表示允许赋值为任意型别。

❌ 假设我们设定 myFavoriteNumber 变数的值的型别为 string, 若使用数字则会报错。

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
//error : Cannot assign to 'myFavoriteNumber' because it is a constant.

✅ 这时候使用any, 则允许任何型别。

let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;
let obj: any = { x: 0 };
obj.bar = 100;
obj = "hello";
const n: number = obj;
const s: string = obj;
const b: boolean = obj;
console.log(n); //hello

宣告一个变数为任意值之後,对它的任何操作,返回的内容的型别都是任意值。在 any型别下,可以赋值给任何型别,使用任何属性和方法,都是被允许的。 但这样是非常危险,非必要都不会使用any,要慎用~


未宣告型别的变数及参数也视为 any 型别

变数如果在宣告的时候,未指定其型别,那麽它会被识别为any型别:

例子1:

let something;
something = 7;
something = "seven";

例子2:


function fn(s) {
    console.log(s.subtr(3));
  }
fn(42);


用 noImplicitAny , 来提醒我使用了any

如上面所述,未指定型别则被识为 any, 如果你想避免这种情况, 可以在 tsconfig 设定 noImplicitAny = true,或是打开"strict": true开启所有严谨模式。 他就会提醒你使用了any型别。


unknown

unknow 可以接受任何型别赋值, 有点类似 any 类型, 但使用上比 any 安全,来看下面例子:

function f1(a: any) {
    a.b(); //ok
}

function f2(a: unknown) {
    a.b();//error: Property 'b' does not exist on type 'unknown'.

}

使用 unknow, 会报错没有b函式的属性, 而 any 则会不会告诉你。

虽然 unknown 和 any 一样可以接受任何型别赋值,但 any 可以赋值给任何型别,unknown 只能赋值给 any 和自己。

let value: unknown;

let value1: unknown = value; // ok
let value2: any = value; // ok
let value3: boolean = value; // error
let value4: number = value; // error
let value5: string = value; // error
let value6: object = value; // error
let value7: any[] = value; // error
let value8: Function = value; // error

void

JavaScript 没有空值(void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函式,如以下例子,这个函式只有 alert,不会 return 任何值。

function alertName(): void {
    alert('My name is iris');
}

never

来表示不应该存在的状态的型别,一般用於错误处理函式。

function error(message: string): never {
  throw new Error(message);
}

此外, 以下面例子,参数使用Union Types(联合型别),当参数被判断没有其他型别时,也会被视为 never

function fn(x: string | number) {
  if (typeof x === "string") {
    // do something
  } else if (typeof x === "number") {
    // do something else
  } else {
    x; // has type 'never'!
  }
}


边学习边纪录的测试例子,不嫌弃可参考这里

下篇也是继续笔记TypeScript才有的那些型别,感谢阅读, 明天见~


参考资料

https://willh.gitbook.io/typescript-tutorial/basics/any
https://www.typescriptlang.org/tsconfig#noImplicitAny
https://www.typescriptlang.org/docs/handbook/2/functions.html#never
https://www.typescriptlang.org/docs/handbook/2/functions.html#unknown


<<:  Validator 验证

>>:  Day10 X 实作一个简单的 Virtualized List 吧!

Day 19 - To Do List (6) 删除 To Do Event

很快的我们来到做删除的部分, 很快速的,我们先来看一下如果我们要把东西从试算表删除该怎麽做: 我们从...

第53天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10259...

Day21-Go档案处理

前言 Go 语言中的有关档案操作的工具,不可不提到标准函式库里边的io/ioutil 和 os pa...

Excel删除100个空白行,同事都只用5秒钟搞定!

在工作中或多或少都会遇到空白行存在的情况。如果只有几个空白行,那麽手动轻松删除即可,但是遇到100行...

创建App-任务中心界面

任务中心界面 今天进行任务中心的界面页,本界面设有三大重点,点数、签到、每日任务。 而签到则以本Ap...