有沒有辦法在打字稿中創建型別,當我呼叫這些方法時,它們可以訪問變數的值?等于陣列的內容,例如,具有 find 方法的陣列。
例子:
const arrayVar: Array = [1,2,3];
array.find(el => el === 1);
在這種情況下,find 可以訪問陣列的值,而arrayVar無需我通過引數將其傳遞給函式,例如,我想以這種方式創建一些東西,例如:
const myVar: MyCustomType = 5;
myVar.add(2); // Nesse caso, o retorno seria 7.
我知道它可以用類和函式來完成,但是我必須將“myVar”的值作為引數傳遞(function add (value1, value2)例如),我想要一種直接訪問它的方法,就像 Array 在它的型別中所做的那樣方法。
uj5u.com熱心網友回復:
使用新方法創建 Number 的子類:
class SwagNumber extends Number {
add(number: number) {
// Tell the TS compiler that `this` is an unboxed Number
return (this as unknown as number) number;
}
}
然后使用:
const six = new SwagNumber(6);
six將由SwagNumberTS 編譯器輸入。
為了證明它有效:
six.add(5)
> 11
讓我們看一下使用的 Constructor,它是 Class 的一部分:
> six.constructor
[class SwagNumber extends Number]
這也將使原始Number原型保持不變,這將停止任何潛在的問題(雙點用于對數字使用方法,以區分點和小數點!)
> 3..constructor
[Function: Number]
或者:
> (3).constructor
[Function: Number]
查看MDN 上的課程
uj5u.com熱心網友回復:
您可以通過將add方法添加到原型來做到這一點:
interface Number {
add: (val:number) => number;
}
Number.prototype.add = function(val:number): number{
return (this as number) val;
}
var myVal: Number = 5
console.log(myVal.add(7))
TS游樂場鏈接
uj5u.com熱心網友回復:
如果此時要在物件上呼叫函式,請創建一個專用類。為什么?因為您有結構化區域,您可以在其中添加/洗掉/編輯和重用代碼的其他部分。
抱歉,我用 JS 撰寫,但你可以在 TypeScript 中毫不費力地進行更改
創建類元素
class CustomArray {
constructor() {
this.arr = [];
}
add(value) {
this.arr.push(value)
}
erase(){
this.arr = [];
}
// so on...
print(){
console.log(this.arr)
}
}
//I use Module, so i will use require.
module.exports = CustomArray;
上面的類是最簡單的例子。您可以使用其他功能進行裝飾。理論上只要你想要的
在其他背景關系中使用
const CustomArray = require("./CustomArray");
var arr = new CustomArray();
arr.add(2)
arr.print()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/503785.html
標籤:javascript 打字稿 类型
