Cro*_*row
7
typescript
在 TypeScript 中是否有“正确”的使用.valueOf()and方法.toString()?
export default class Measure extends Number implements Number {
public symbol = ''
constructor(value: number | string | Measure, symbol?: string) {
super(value)
if (symbol) {
this.symbol = symbol
}
}
public valueOf = (): number => {
return parseFloat(this.toPrecision(12))
}
public toString = (): string => {
return String(this.valueOf()) + this.symbol
}
}
Run Code Online (Sandbox Code Playgroud)
.valueOf()
- Number() 有效;
- +作品;
- 在数字环境中工作;
- ts-lint 抱怨;
.toString()
- String() 有效;
- 在字符串上下文中不起作用;
- ts-lint 不会抱怨;
测试
import Measure from '../src/testing'
describe('Measure Class', () => {
const measure = new Measure(1, 'm')
// Number() - works!
test('Number', () => {
const number = Number(measure)
expect(number).toBe(1)
})
// String - works!
test('String', () => {
const string = String(measure)
expect(string).toBe('1m')
})
/**
* Number context - fails!
* Operator '+' cannot be applied to types '1' and 'Measure'.ts(2365)
*/
test('Number + Measure', () => {
const number = 1 + measure
expect(number).toBe(2)
})
/**
* String context - fails!
* Expected: "is: 1m"
* Received: "is: 1"
*/
test('String + Measure', () => {
const string = 'is: ' + measure
expect(string).toBe('is: 1m')
})
})
Run Code Online (Sandbox Code Playgroud)