動作確認環境
学んだこと
型、文字列型、数値型、真偽型、配列型、オブジェクト型、any型、ninion型、undefined型、null型、変数、定数、テンプレート文字列、スプレッド演算子、分割代入、関数、アロー関数、クラス、アクセス修飾子、アクセサメゾット、クラスの継承、インターフェイス、ジェネリック
サンプルコード
sample.ts
// 文字列
var title: string = 'Angular';
title = 'angular';
// 数値型
var n: number = 0;
// 真偽値型
var isOpen: boolean = true;
// 配列型
var keywords: (string | number)[] = ['name', 'email', 'bady', 0];
// タブル型
var parment: [number, string, number] = [1, 'apple', 0];
// オブジェクト型
var object: { [key: string]: string } = {
name: 'yamada torou',
id: 'TEST',
};
var post: object = [{ id: 1, content: 'lorem ipsum' }];
// 共用型(Union型)
var sample: string | number | boolean;
sample = 'yamada';
sample = 100;
sample = true;
// enum型
enum KeyCode {
Backspace = 8,
Tab = 9,
Enter = 13,
}
console.log(KeyCode.Backspace); // = 8
enum ErrorCode {
OK = 200,
BAD_RESPONSE = 400,
UNAUTHORIZED = 401,
}
console.log(ErrorCode.OK);
enum Character {
Bod, // 0
Dad, // 1
Mom, // 2
}
console.log(Character.Bod);
// any型
var something: any = 'foo';
something = 100;
something = true;
something = { id: 1 };
// null,undefined型
var el: Element | null = document.querySelector('#app');
var foo: undefined = undefined;
// 型推論
var unknown = 'String';
unknown = 10; //文字列として認識されているためエラーが発生
// let
let foo_let = 'foo';
let date = new Date();
if (true) {
var tmp = 'tmp';
}
console.log(tmp);
for (var i = 0; i < 5; i++) {
console.log(i);
}
for (let i = 0; i < 5; i++) {
console.log(i);
}
// console.log(i);
var hoge = 'hoge';
function loghoge() {
let hoge = 'new hoge!';
console.log(hoge);
}
loghoge();
//定数(一度入れたら変更ができないデータの箱のこと)
const currentYear: number = 2022;
// currentYear = 2000; //再代入できない
const PI = Math.PI;
// テンプレート文字列(Template Literals)
let template1 = `This is Template string.`;
let name1: string = 'yamada';
let template2 = `
Hello, TypeScript tutorial.
thank you.${name1}
`;
console.log(template2);
// スプレッド演算子
let categories = ['post', 'new', 'info'];
// ...catefories
// 複製
let copyCat = [...categories]; //'post','new','info'
// console.log(copyCat,copyCat === categories);
// 連結
let pushCat = ['other', ...categories];
console.log(pushCat);
let unshiftCat = [...categories, 'other'];
console.log(unshiftCat);
// 途中に挿入
let insertCat = ['other', ...categories, 'Q&A'];
console.log(insertCat);
// 2つの配列をマージ
let mergeCat = [...categories, ...copyCat];
console.log(mergeCat);
// オブジェクト
let post1 = { id: 1, content: 'dummy', create: '2022-06-01' };
console.log(post1);
let copyObj = { ...post1 };
// console.log(copyObj);
let pushObj = { ...post1, updated: '2022-06-10' };
// let pushObj = { ...post1, create: '2022-06-10' };
// console.log(pushObj)
let mergeObj = { ...post1, ...pushObj };
console.log(mergeObj);
let test = { ...categories };
console.log(test);
//
//分割代入
let categories1 = ['post', 'new', 'info', 'other'];
// let a = categories1[0];
// let b = categories1[1];
// let [a, b, ...rest] = categories1;
// console.log(a, b, rest);
let [a = 10, b = 7] = [1];
// console.log(a, b);
let post2 = { id: 1, content: 'dummy', create: '2022-06-01' };
const { id, content: body } = post2;
console.log(id, body);
// const { id, name } = user.accuntInfo.date;
//user.accountInfo.data.id
function test1({ a, b, c }) {}
//
// 関数
function greet(name: string = 'yamda'): void {
console.log(`Helle world! ${name}`);
}
// greet('Taro');
//可変長引数
function sum(...values: number[]): number {
return values.reduce(function (prev, current) {
return prev + current;
});
}
console.log(sum(1, 3, 5, 9));
//アロー関数
// () => {};
let add = (x1: number, x2: number): number => {
return x1 + x2;
};
console.log(add(1, 3));
let hello1 = (neme1: string) => {
return `hello, ${name1}`;
};
console.log(hello1('yamada'));
let hello2 = (name2) => `Hello ${name2}`;
console.log(hello2('tarou'));
//引数から内容が把握しやすく、短い文で表現できる場合は省略しよう
//文が長い場合、省略せずにしっかり書きましょう
//引数が一つもないときは、()は省略できない
// let getValue = (): number => {
// return document
// .getElementById('app')
// .getElementsByTagName('div')
// .firstChild.getAttribute('value')
// .toFixed(2);
// };
//アロー関数の最大の特徴は、内部で使用できるthisの扱い
// document.getElementById('button1').addEventListener('click', function () {
// console.log(this); //<button></button>
// });
//this => Window
// document.getElementById('button1').addEventListener('click', () => {
// console.log(this); //Window
// });
// クラス (日本後で理解)
class クラス名 {
プロパティ = 'プロパティ';
constructor() {
//初期化
this.プロパティ = 'プロパティ';
}
メゾット1() {
console.log('テスト');
this.プロパティ = 'プロパティ3';
}
}
const インスタンス = new クラス名(); // インスタンス化
インスタンス.プロパティ = 'プロパティ2';
インスタンス.メゾット1();
// // クラス
// class Animal {
// age: number = 10;
// private _legs = 1;
// constructor(public isCry: boolean) {}
// //引数がないためvoidを設定
// cry(): void {
// if (this.isCry) {
// alert(`age: ${this.age}`);
// }
// }
// // アクセサメソッド(getter,setter)
// get legs() {
// if (this._legs > 2) {
// return this._legs;
// }
// }
// set legs(value: number) {
// if (value > 1) {
// this._legs = value;
// }
// }
// // ショートハンド(コードを短くする)でアクセサメソッドも使用することがある。
// // get email(){
// // return this.formGroup.get('email');
// // }
// // dog.email
// }
// let dog = new Animal(true);
// // dog.cry();
// dog.legs = 5;
// console.log(dog.legs);
//クラスの継承
class Animal2 {
age: number = 10;
constructor(public isCry: boolean) {
this.age = 2;
}
cry(): void {
if (this.isCry) {
alert(`age: ${this.age}`);
}
}
}
class Dog extends Animal2 {
constructor(public isCry: boolean) {
super(isCry);
this.age = 10;
}
cry(): void {
// if (this.isCry) {
// alert('Bow ,wow');
// }
console.log('dog is cry');
super.cry();
}
}
let dog2 = new Dog(true);
dog2.cry();
// インターフェイス (Interface)
interface Animal {
name: string;
legs: number;
isCry: boolean;
cry(): void;
}
interface SuperAnimal extends Animal {
canRun: boolean;
}
class Dog implements SuperAnimal {
name: string = 'Maru';
legs: number = 4;
isCry: boolean = true;
canRun: boolean = true;
cry(): void {
if (this.isCry) {
console.log('Bow, wow!');
}
}
}
let maru = new Dog();
maru.cry();
let Dog2: Animal = {
name: 'maru',
legs: 4,
isCry: true,
cry: function () {
console.log('bow wow!');
},
};
// ジェネリック(Gnerics)
class NumberStore {
data: number;
}
class StringStore {
date: string;
}
class Store<T> {
//T(Type), U , V, T1,T2,T3
data: T;
getStore(): T {
return this.data;
}
}
let stringDate = new Store<number>();
let booleanData = new Store<boolean>();
function hello<T>(keyword: T) {
console.log(`Log: ${keyword}.`);
}
hello<string>(`Helle, Yohei!`);
hello<number>(10000);
class Component<T, U> {
neme: T;
create: U;
}
let component = new Component<string, number>();
// component.create = '2022/07/01'