TypeScript基本知識点整理(絶対入門---マジ!!)
27386 ワード
TypeScript , , !
:
:
npm i typescript -g // typescript
npm init -y // , , package.json
tsc --init // tsconfig.json
npm i @types/node -S //
;
一、変数タイプ
1.number
let num1 : number = 20;
let num2 : number = 175.5;
let a1 : number = Infinity; //
let a2 : number = -Infinity; //
let a3 : number = NaN;
注意:
Infinity, -Infinity, NaN Number
2.undefined
let un : undefined = undefined;
注意:
undefined undefined
typescript , , undefined
3.null
let nu : null = null;
注意:
null null
null ,undefined , , undefined , unll 。
特に注意:
,undefined null , , , 。
4.string
//
let str : string = ' !'
//
let str1 : String = new String(' !')
5. boolean
let boo : boolean = true;
let boo1 : boolean = false
6.symbol
let sy : symbol = Symbol('bar');
注意:
symbol Symbol 。
7.
//
let arr1 : number[] = [1, 2]
// ---->
let arr2 : Array = ['a', 's']
//
let arr3 : string[] = new Array('a', 's')
// --> , number string,
let arr4 : Array = [2, 'a']
8. (tuple)
let tup : [string,number] = ['asdasd', 43233];
注意:
, ,
,
9. (enum)
enum---> 。
enum REN {
// nan = 1 ----->
nan,
nv,
yao
}
console.log(REN.nan)//0
console.log(REN.nv)//1
console.log(REN.yao)//2
// ,TS
console.log(REN[2])// yao
注意:
----> 0 , ,
enum SIJI {
chun = ' ',
xia = ' ',
qiu = ' ',
dong = ' '
}
console.log(SIJI.chun)//
console.log(SIJI.xia)//
console.log(SIJI.qiu)//
console.log(SIJI.dong)//
注意:
,
, ,
10. void
void ---> ,
function f1() : void {
console.log('void ')
}
注意:
undefined。 JS , , undefind。 , void 。
11. any
注意:
any ,any
let an : any = 'any ';
console.log(an)//any
an = 25;
console.log(an)//25
注意:
any
, , ,( ), any
let an1;
an1 = ' , ';
console.log(an1)// ,
an1 = 25
console.log(an1)//25
any ,
let something: any = 42
something.mayExist() // ,
something.toFixed() // , ,
12. never
注意:
never , never , never never ( never )。 any never。
Neverタイプは2つのケースでよく使用されます
---》 never
function f5() : never {
while (true) {
// do something
}
}
function f2(msg : string) : never {
throw new Error(msg)
}
13.
let da : Date = new Date()
console.log(da)
14.
//
let reg1 : RegExp = new RegExp('ljy','gi')
console.log(reg1)
//
let reg2 : RegExp = /ljy/gi
console.log(reg2)
二、関数
1.
定義関数には、関数宣言と関数式の2つの形式があります.関数のパラメータと戻り値を定義して、そのタイプを指定します.関数を呼び出す場合、入力パラメータタイプは定義関数パラメータタイプと一致する必要があります.
//
function f(age:number) : string {
return ` ${age} `;
}
let age : number = 22;
let res : string = f(age);
console.log(res)
let f1 = (age:number) : string => {
return ` ${age} `;
}
let age1 :number = 21;
let res1 : string = f1(age1);
console.log(res1)
注意:
,
:
: fn
TypeScriptの=>とES 6の=>を混同しないように注意
TypeScriptのタイプ定義では、=>は関数の定義を表し、左は入力タイプ、右は括弧で囲み、右は出力タイプです.
// let fn: (x: Type, y: Type) => Type = (x, y) => {}
//
var run3: (x: number, y: number) => string = function(x: number, y: number): string{
return 'run3';
}
console.log(run3(1, 2))
// run3 , 。 ts , :
var run4: (x: number, y: number) => string = function(x, y){
// ,
return 'run4';
}
console.log(run4(1, 2))
2. void
function f3() : void {
console.log(' ')
}
f3()
3.
注意:
function f4(age:number, cm?:number) : string {
//cm ,
if (cm) {
return ` ------ ${cm} `;
} else {
return ` ----- ${age} `
}
}
console.log(f4(12))
console.log(f4(24, 175))
4.
注意:tsはデフォルト値が追加されたパラメータをオプションパラメータとして認識し、デフォルト値があるパラメータの位置は【オプションパラメータは後ろに置く必要がある】の制限を受けない
function f5(age:number, cm:number = 188) : string {
return ` ---- ${age} --- ${cm}cm`
}
console.log(f5(25))
5.
// , ,
function f6(...rest:number[]) : number[] {
return [...rest];
}
console.log(f6(1,2,3,4,5,6,7,8,9))
function f7(a:number, b:number, ...rest:number[]) : number[] {
return [a, b, ...rest]
}
console.log(f7(100,200,1,2,3,4,5,6))
6.
interface int1 {
say (age:number) : void //
}
interface int2 {
say : (age:number) => void //
}
7.
注意:
,
any
any ( )
typescript :
TypeScript , , 。
function f1(x: number, y: number): number;
function f1(x: string, y: string): string;
// ,
function f1(x: any, y: any): any {
return x + y;
}
f1(1, 2);
f1('a', 'b');
三、類
1.
public:
注意:
, , , , , public
class People {
public name : string
constructor (name:string) { //
this.name = name
}
public say () :void {
console.log(' ')
}
}
private
注意:
, ,
class People {
private name : string
constructor (name:string) { //
this.name = name
}
private say () :void {
console.log(' ')
}
}
protected
注意:
,
class People {
protected name : string
constructor (name:string) { //
this.name = name
}
protected say () :void {
console.log(' ')
}
}
注意:
TypeScriptはコンパイル時のみチェックし、クラスの外部でprivateまたはprotectedによって修飾された属性またはメソッドにアクセスしようとすると、TSはエラーを報告しますが、これらの属性またはメソッドへのアクセスを阻止することはできません.
readonly
注意:
,
class People {
readonly name : string
constructor (name:string) { //
this.name = name
}
}
2.
class People {
name : string // public
age : number
constructor (name:string, age:number) { //
this.name = name
this.age = age
}
say () :void {
console.log(' ')
}
}
const HH : People = new People(' ', 21)
console.log(HH.name)
console.log(HH.age)
HH.say()
3.
class Student extends People {
cm : number
constructor (name:string, age:number, cm:number) {
super(name, age) //super , ,super
this.cm = cm
}
work () : void {
console.log(' ')
}
}
const stu1 : Student = new Student('liu', 22, 175)
console.log(stu1.name)
console.log(stu1.age)
console.log(stu1.cm)
stu1.say()
stu1.work()
4.
注意:
class People {
static name1 : string = ' ';
static say () :void {
console.log(' ')
}
}
console.log(People.name1)
People.say()
注意:
, , ,(java ), ,
5.
---->
, ,
class Animal {
name : string
constructor (name:string) {
this.name = name
}
eat () : void {
// eat
}
}
class Laohu extends Animal {
constructor (name:string) {
super(name)
}
eat () : void {
console.log(`${this.name} !`)
}
}
class Laoshu extends Animal {
constructor (name:string) {
super(name)
}
eat () : void {
console.log(`${this.name} !`)
}
}
const laohu : Laohu = new Laohu(' ')
laohu.eat()
const laoshu : Laoshu = new Laoshu(' ')
laoshu.eat()
6.
注意:
(implement) 。 , 。 , 。
,
interface Play {
plays (difang:string) : void;
}
class Playy implements Play {
plays(difang: string): void {
console.log(` ${difang} !!!`)
}
}
const pl : Playy = new Playy();
pl.plays(' ')
注意:クラスとインタフェースの違い
(implement) , (extends) 。
, 。
, instanceof 。 。
(public) , , 。
7.
注意:
abstract , ( )
: , ,
abstract ( )
( : Animal eat, eat )
abstract class People {
name : string
constructor (name:string) {
this.name = name
}
abstract eat (food:string) :void;// ,
}
class Stud1 extends People {
//
constructor (name:string) {
super(name)
}
eat(food: string): void {
console.log(` ${food}`)
}
}
const stu11 : Stud1 = new Stud1('liu')
stu11.eat(' ')
四、インタフェース
注意:
: ; , ;typescript interface 。
: , , , , 。typescrip java, , 、 、 。
1.
, json
interface Sx {
name : string
age : number
}
function f8(peop:Sx) {
//name age
console.log(peop)
}
const obj = {
name : 'liu',
age : 25
}
f8(obj)
2.
interface Sta {
(difang : string, todo : string) : string
}
let play : Sta = (difang:string, todo:string) : string => {
return ` ${difang} ${todo}`
}
console.log(play(' ', ' '))
3.
//
interface UserArr {
// number, string
[index : number] : string
}
const arr : UserArr = ['a', 'b']
console.log(arr)
//
interface UserObj {
[index : number] : number
}
const obj1 : UserObj = { 2:1, 3:4 }
console.dir(obj1)
4.
interface Anmal {
//
name : string
eat (food:string) : void
}
// implements ,
class Laoshu implements Anmal{
name : string
constructor (name : string) {
this.name = name
}
eat(food:string):void {
console.log(`${this.name} ${food}`)
}
}
const lao : Laoshu = new Laoshu(' ')
lao.eat(' ')
5.
// Anmal
// LaoHu , LaoHu Anmal
interface LaoHu extends Anmal{
say (sa : string) : void
}
//
class XiaoLaoHu implements LaoHu{
name : string
constructor (name : string) {
this.name = name
}
eat (food : string) : void {
console.log(`${this.name} ${food}`)
}
say(sa: string): void {
console.log(`${this.name} ${sa}`)
}
}
const xiao : XiaoLaoHu = new XiaoLaoHu(' ')
xiao.eat(' ')
xiao.say(' ')
五、汎用
注意:
, , , , ,
,
構文:一般的には大文字
1.
, T
function f9(value:T) : T {
// T, T
console.log(` ${value}`)
return value
}
f9(10)
function f10 (value:T) : any {
// T,
console.log(` ${value}`)
return ` ${value}`
}
console.log(f10(' ljy'))
2.
, < >
class Ni {
name : T
constructor (name : T) {
this.name = name
}
say (value : T) : any {
return `${this.name} ${value}`
}
}
const ni1 = new Ni('ljy')// , string
console.log(ni1.say(' '))
const ni2 = new Ni(20)// , number
console.log(ni2.say(23))
3.
interface Niniubi {
(value:T) : any
}
let fff : Niniubi = (value : T) : any => {
return ` ${value}`
}
console.log(fff(25))
console.log(fff('ljy'))
interface ConfigFnTwo{
(value:T):T;
}
function setDataTwo(value:T):T{
return value
}
var setDataTwoFn:ConfigFnTwo = setDataTwo
setDataTwoFn('name');
六、ネーミングスペース
namespace Shuaige {
export class DeHua {
public name : string = ' '
say () {
console.log(` ${this.name}`)
}
}
}
namespace Bajie {
export class DeHua {
public name : string = ' '
say () {
console.log(` ${this.name}`)
}
}
}
const de : Shuaige.DeHua = new Shuaige.DeHua()
de.say()
const de1 : Bajie.DeHua = new Bajie.DeHua()
de1.say()
七、連合タイプ
結合タイプは、1つの値がいくつかのタイプの1つであることを示し、各タイプを区別するために(|)を使用します.
コンビネーションタイプの変数は、付与されると、タイプ推論のルールに基づいてタイプが推定されます.
値が連合タイプの場合、この連合タイプのすべてのタイプで共有されているメンバーにのみアクセスできます.
let ddd : string | number
ddd = 'nihao'
console.log(ddd.length)//ddd string, length
console.log(` ${ddd}`)
ddd = 255
console.log(` ${ddd}`)
console.log(ddd.length)// ddd number, length
//ddd = false err
//console.log(` ${ddd}`) err
1.
TypeScriptが結合タイプの変数がどのタイプなのか分からない場合、この結合タイプのすべてのタイプに共通する属性またはメソッドにアクセスするしかありません.
function f11(name : string, age : string | number) {
console.log(age.length)//
}
f11('ljy', '21')
:Property 'length' does not exist on type 'string | number'.Property 'length' does not exist on type 'number'.
前の例ではlengthはstringとnumberの共有属性ではないので、エラーが発生します.したがって、タイプの共通のプロパティまたはメソッドにのみアクセスできます.
function f12(name : string, age : string | number) {
console.log(age.toString)
}
f12('ljy', 21)
八、タイプ断言
注意:タイプアサーション(Type Assertion)は、値のタイプを手動で指定するために使用できます.
:
as
型断言の使い方は以上のように、断言が必要な変数の前につければよい
先ほどTypeScriptで連合型の変数がどのタイプなのか分からなかったときに
function f13(name : string, age : string | number) {
if (age.length) { //
console.log(age.length) //
} else {
console.log(age.toString)
}
}
f13('ljy', 21)//Property 'length' does not exist on type 'string |number'.Property 'length' does not exist on type 'number'
この場合、タイプブレークスルーを使用してageをstringにブレークスルーできます.
function f14(name : string, age : string | number) {
if ((age).length) {//
console.log((age).length)//
} else {
console.log(age.toString)
}
}
f14('ljy', 21)
タイプブレークスルーはタイプ変換ではありません.結合タイプに存在しないタイプとブレークスルーすることはできません.
function toBoolean(something: string | number): boolean {
return something;
}
Type 'string | number' cannot be converted to type 'boolean'
私は読んで、ts公式ドキュメント、jspangのtsチュートリアル、Hopskenのtsチュートリアル、Staticyのtsチュートリアルを経て、やっと入門して、更にこの感謝!
転載先:https://juejin.im/post/5cd97938e51d456e39631999